Tkinter 之TreeView表格与树状标签
一、TreeView介绍
TreeView组件是一个树状结构和表格的结合体。第一列是树状结构,后几列是列表。每一行表示一个item,树的item可以分级,每个item有子item,名称对应text标签。每一行的值用values元组里的值表示。
item有5个标签,分别是:text,image,values,open,tags。
二、参数说明
1、TreeView参数:
参数 | 作用 |
---|---|
columns | 值是一个列表。列表里每个元素代表一个列标识符的名称。列表的长度为列的长度。 |
displaycolumns | 列表,这里的元素是列表符,表示的是哪些列可以显示以及顺序,或者用‘#all’表示全部显示 |
height | 表示要显示几行数据(注意:这个部件的宽度是根据列的多少自动定义的) |
padding | 填充,是个最多4个元素的列表 |
selectmode | 定义如何去选择一行。"extended"是可选多行(用Ctrl+鼠标), “browse” 是只能选一行, “none"是不能改变选择,默认是"extended” |
show | 表示这个部件显示哪种功能,“tree”表示仅显示第一列(单树模式),“headings”表示显示除一列的其他列(单列表模式),默认是"tree headings",显示所有列。注意,‘#0’(第一列)是永远存在的 |
2、item参数:
选项 | 描述 |
---|---|
text | 树状结构这边的名称。 |
image | 树状结构这边的名称的左边加个图。 |
values | 列表结构这边每一行的值,values未赋值的列会为空值,超过列的长度会被截断。 |
open | 布尔值,代表子item的显示打开或关闭 |
tags | 与item关联的标记 |
3、tag参数
选项 | 描述 |
---|---|
foreground | 前景色 |
background | 背景色 |
font | 字体 |
image | 图 |
三、TreeView可选事件和方法
<< TreeviewSelect>>,代表选择变化是发生;
<< TreeviewOpen>>,item的open=True时发生
<< TreeviewClose>>,item的open=False时发生
提示:可用 Treeview.focus() 和 Treeview.selection() 可获取 item 或 items.
方法列表:
bbox(item, column=None)
返回一个item的范围(x,y,width, height),如果column指定了一个列,则返回一个元素范围,如果item不可视,则返回空值。
get_children(item=None)
返回一个item的所有子item,这个子item是一个列表形式,如果item没指定,则返回根目录的item
set_children(item, *newchildren)
设置一个item的新子item。这里设置了之后实际是全部替换
column(column, option=None, **kw)
给各列设置属性,或返回属性。
第一个column是列标识符
第二个option,如果不设置则返回所有属性的字典,如果设置则返回那个属性的值。
kw里的option有5个
id:只读属性,返回列名。
anchor:文字在cell里的对齐方式,标准的tk的anchor属性
minwidth: 值,单位是像素,列的最小宽度
stretch: 布尔值,表示列的宽度是否随整个部件的改动而变化。
width:列宽,单位是像素。
提示:如果要设置树状结构那列,用column=“#0”
delete(*items)
删除item及其子item
detach(*items)
断开item及其子item,这里的断开只是不显示,以后还可以链接起来。
exists(item)
返回True,如果item在树里。
focus(item=None)
如果不指定item,则返回当前获得焦点的item,如果指定item,则让该item获得焦点。若无则返回空值。
heading(column, option=None, **kw)
查询或修改指定列的标题选项
第一个column是列标识符
第二个option,如果不设置则返回所有属性的字典,如果设置则返回那个属性的值。
kw里的option有4个
text:列头名
image: 列头名右的图像
anchor:文字在heading里的对齐方式,标准的tk的anchor属性
command:点击列头的回调函数
insert(parent, index, iid=None, **kw)
创建新item并返回新创建item的项标识符。
parent:用item ID表示父item,或者‘’表示根item
index:数值int,或‘end’,表示item插入的位置
iid:item标识符,可自动生成
kw:看上面的Item Options介绍。
item(item, option=None, **kw)
查询或修改指定item的选项
selection(selop=None, items=None)
如果没指定selop则返回所有选中的items,列表形式,若selop指定了selection methods,则相应act。
set(item, column=None, value=None)
指定item,如果不设定column和value,则返回他们的字典,如果设定了column,则返回该column的value,如果value也设定了,则作相应更改。
四、代码示例
1、表格代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | import tkinter as tk from tkinter import ttk window = tk.Tk() # 设置窗口大小 winWidth = 600 winHeight = 400 # 获取屏幕分辨率 screenWidth = window.winfo_screenwidth() screenHeight = window.winfo_screenheight() x = int ((screenWidth - winWidth) / 2 ) y = int ((screenHeight - winHeight) / 2 ) # 设置主窗口标题 window.title( "TreeView参数说明" ) # 设置窗口初始位置在屏幕居中 window.geometry( "%sx%s+%s+%s" % (winWidth, winHeight, x, y)) # 设置窗口图标 window.iconbitmap( "./image/icon.ico" ) # 设置窗口宽高固定 window.resizable( 0 , 0 ) # 定义列的名称 columns = ( "name" , "gender" , "age" ) tree = ttk.Treeview(window, show = "headings" , columns = columns, selectmode = tk.BROWSE) # 设置表格文字居中 tree.column( "name" , anchor = "center" ) tree.column( "gender" , anchor = "center" ) tree.column( "age" , anchor = "center" ) # 设置表格头部标题 tree.heading( "name" , text = "姓名" ) tree.heading( "gender" , text = "性别" ) tree.heading( "age" , text = "年龄" ) # 设置表格内容 lists = [{ "name" : "yang" , "gender" : "男" , "age" : "18" }, { "name" : "郑" , "gender" : "女" , "age" : "25" }] i = 0 for v in lists: tree.insert('', i, values = (v.get( "name" ), v.get( "gender" ), v.get( "age" ))) i + = 1 tree.pack(expand = True , fill = tk.BOTH) # 获取当前点击行的值 def treeviewClick(event): # 单击 for item in tree.selection(): item_text = tree.item(item, "values" ) print (item_text) # 鼠标左键抬起 tree.bind( '<ButtonRelease-1>' , treeviewClick) # 鼠标选中一行回调 def selectTree(event): for item in tree.selection(): item_text = tree.item(item, "values" ) print (item_text) # 选中行 #tree.bind('<<TreeviewSelect>>', selectTree) window.mainloop() |
2、树状代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | import tkinter as tk from tkinter import ttk window = tk.Tk() # 设置窗口大小 winWidth = 600 winHeight = 400 # 获取屏幕分辨率 screenWidth = window.winfo_screenwidth() screenHeight = window.winfo_screenheight() x = int ((screenWidth - winWidth) / 2 ) y = int ((screenHeight - winHeight) / 2 ) # 设置主窗口标题 window.title( "TreeView参数说明" ) # 设置窗口初始位置在屏幕居中 window.geometry( "%sx%s+%s+%s" % (winWidth, winHeight, x, y)) # 设置窗口图标 window.iconbitmap( "./image/icon.ico" ) # 设置窗口宽高固定 window.resizable( 0 , 0 ) # 定义列的名称 tree = ttk.Treeview(window, show = "tree" ) myid = tree.insert(" ",0," 中国 ",text=" 中国China ",values=(" 1 ")) # " "表示父节点是根 myidx1 = tree.insert(myid, 0 , "广东" ,text = "中国广东" ,values = ( "2" )) # text表示显示出的文本,values是隐藏的值 myidx2 = tree.insert(myid, 1 , "江苏" ,text = "中国江苏" ,values = ( "3" )) myidy = tree.insert(" ",1," 美国 ",text=" 美国USA ",values=(" 4 ")) myidy1 = tree.insert(myidy, 0 , "加州" ,text = "美国加州" ,values = ( "5" )) # 鼠标选中一行回调 def selectTree(event): for item in tree.selection(): item_text = tree.item(item, "values" ) print (item_text) # 选中行 tree.bind( '<<TreeviewSelect>>' , selectTree) tree.pack(expand = True , fill = tk.BOTH) window.mainloop() |
五、效果图
.png)

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY