在python tkinter模块中,treeview是在应用程序中实现树状结构或表格形式的数据。它不仅能展示层级结构,还支持增删改查等操作。本文将讲述treeview的核心方法。
一、treeview的基本概念
treeview是tkinter中 ttk 模块的一个控件,用以展示树状结构或表格数据。treeview 在 tk 中没有控件,所以必须导入 tkinter.ttk() 。
二、导入tkinter,ttk
注:由于tkinter是python idle 自带的模块,因此无需pip安装。
from tkinter import * from tkinter import ttk
三、treeview 的基本使用
1.创建 treeview 对象
from tkinter import *
from tkinter import ttk
# 创建主窗口
root = tk()
root.title("treeview example")
root.geometry("300x300")
# 创建 treeview 对象
tree = ttk.treeview(root, column=("mid", "name" , "salary"),show="tree headings")
tree.pack(fill="both", expand = true)
#设置列标题
tree.heading("mid", text = "id编号")
tree.heading("name" , text = "姓名")
tree.heading("salary" , text = "工资")
#设置列宽
tree.column("mid", width = 30, anchor = "center")
tree.column("name", width=80,anchor = "center")
tree.column("salary", width=30,anchor = "center")
root.mainloop()•运行结果:

2.添加数据
#添加根节点,#0是treeview预留的第一空列的标识,用户可以设置它
tree.column("#0", width=20, anchor="w")
level_a = tree.insert("", "end",text="员工")
#添加子节点
tree.insert(level_a, "end", values=("01","tom",25000))
tree.insert(level_a, "end", values=("02","jerry",10000))
tree.insert(level_a, "end",values=("03","james",16000))•在添加节点是,使用的是 insert() 方法,该方法有3个参数:
使用的方法: insert(parent, position, text)
- parent:空字符串表示新项是父项。""
- position:"end"指示小组件将项目放置在树的末尾。
- text:指定项目的标签。
•效果展示:

3.表格制作
由于tkinter没有直接开发表格的控件,因此treeview可以很好的进行表格开发。
from tkinter import *
from tkinter import ttk
# 创建主窗口
root = tk()
root.title("treeview example")
root.geometry("300x300")
# 创建 treeview 对象
tree = ttk.treeview(root, column=("id", "name" , "academic_report"),show="headings")
tree.pack(fill="both", expand = true)
#设置列标题
tree.heading("id", text = "学号")
tree.heading("name" , text = "姓名")
tree.heading("academic_report" , text = "成绩")
#设置列宽
tree.column("id", width = 30, anchor = "center")
tree.column("name", width=80,anchor = "center")
tree.column("academic_report", width=30,anchor = "center")
#添加节点,每个节点都是父节点
tree.insert('', "end", values=("01","tom",702))
tree.insert('', "end", values=("02","jerry",673))
tree.insert('', "end",values=("03","james",624))
tree.insert("","end",values=("04","alice",608))
root.mainloop()制作表格与普通树状结构的不同之处:
- ttk,treeview() 中的 show="tree headings" 改为 show = "headings" ,这将忽略 treeview 创建的第一空列(即 #0 );
- 调用 tree.insert() 方法时,第一个参数一直是 "" ,因此表格中每一项都是父项,无子项。
运行结果:

三、treeview 的高级功能
treeview 支持事件绑定,动态更新数据等功能。
1.事件绑定
treeview 支持事件绑定从而实现与用户的交互。例如,绑定双击事件以显示选中的数据。( 注:代码为表格制作的后续 )
#绑定双击事件,以显示所选中的数据
def show_data(event):
# 获取选中的数据
selected_item = tree.selection()[0]
data = tree.item(selected_item, "values")
print(f"学号:{data[0]}\n姓名:{data[1]}\n成绩{data[2]}")
print("-"*30)
tree.bind("<double-1>", show_data)运行结果:

2.动态更新数据
treeview 支持动态更新数据。例如,删除某一行或修改某一行:
# 获取数据编号 ---> tree.get_children()方法,返回元组对象 child_list = tree.get_children() print(child_list) # 删除对象 delete_item = child_list[3] tree.delete(delete_item)
删除结果显示:

修改某一行,可以这样操作:
# 修改数据
modified_item = child_list[2]
tree.item(modified_item, values = ("05", "jack", 523))运行结果:

四、完整源码分享
1.树状员工列表
from tkinter import *
from tkinter import ttk
# 创建主窗口
root = tk()
root.title("treeview example")
root.geometry("300x300")
# 创建 treeview 对象
tree = ttk.treeview(root, column=("mid", "name" , "salary"),show="tree headings")
tree.pack(fill="both", expand = true)
#设置列标题
tree.heading("mid", text = "id编号")
tree.heading("name" , text = "姓名")
tree.heading("salary" , text = "工资")
#设置列宽
tree.column("mid", width = 30, anchor = "center")
tree.column("name", width=80,anchor = "center")
tree.column("salary", width=30,anchor = "center")
#添加根节点,#0是treeview预留的第一空列的标识,用户可以设置它
tree.column("#0", width=20, anchor="w")
level_a = tree.insert("", "end",text="员工")
#添加子节点
tree.insert(level_a, "end", values=("01","tom",25000))
tree.insert(level_a, "end", values=("02","jerry",10000))
tree.insert(level_a, "end",values=("03","james",16000))
root.mainloop()2.学生成绩表格显示
from tkinter import *
from tkinter import ttk
# 创建主窗口
root = tk()
root.title("treeview example")
root.geometry("300x300")
# 创建 treeview 对象
tree = ttk.treeview(root, column=("id", "name" , "academic_report"),show="headings")
tree.pack(fill="both", expand = true)
#设置列标题
tree.heading("id", text = "学号")
tree.heading("name" , text = "姓名")
tree.heading("academic_report" , text = "成绩")
#设置列宽
tree.column("id", width = 30, anchor = "center")
tree.column("name", width=80,anchor = "center")
tree.column("academic_report", width=30,anchor = "center")
#添加节点,每个节点都是父节点
tree.insert('', "end", values=("01","tom",702))
tree.insert('', "end", values=("02","jerry",673))
tree.insert('', "end",values=("03","james",624))
tree.insert("","end",values=("04","alice",608))
#绑定双击事件,以显示所选中的数据
def show_data(event):
# 获取选中的数据
selected_item = tree.selection()[0]
data = tree.item(selected_item, "values")
print(f"学号:{data[0]}\n姓名:{data[1]}\n成绩{data[2]}")
print("-"*30)
tree.bind("<double-1>", show_data)
# 获取数据编号 ---> tree.get_children()方法,返回元组对象
child_list = tree.get_children()
print(child_list)
# 删除数据
delete_item = child_list[3]
tree.delete(delete_item)
# 修改数据
modified_item = child_list[2]
tree.item(modified_item, values = ("05", "jack", 523))
root.mainloop()通过本文的讲解,您应该能够掌握 treeview 的基本使用方法及其在实际开发中的应用场景。希望本文对您有所帮助!
到此这篇关于python tkinter treeview组件详解与实战的文章就介绍到这了,更多相关python tkinter treeview组件内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论