Treeview 作为树使用的简单案例
“”"
main = Tk()
data = [(1, “小明”, 23, ‘男’, ‘2021-09-21’), (2, “小强”, 23, ‘男’, ‘2021-09-21’),
(3, "小红", 23, '女', '2021-09-21'), (4, "铁头", 23, '男', '2021-09-21')]
tree = ttk.Treeview(main, columns=(‘id’, ‘name’, ‘age’, ‘sex’,‘birth’), show=“tree headings”, displaycolumns=“#all”)
tree.heading(“#0”, text=“学校”, anchor=W)
tree.heading(‘id’, text=“编号”, anchor=W)
tree.heading(‘name’, text=“姓名”, anchor=W)
tree.heading(‘age’, text=“年龄”, anchor=W)
tree.heading(‘sex’, text=“性别”, anchor=W)
tree.heading(‘birth’, text=“出生日期”, anchor=W)
stu_root = tree.insert(“”, END, text=“学生”)
man = tree.insert(stu_root, END, text=“男”)
wom = tree.insert(stu_root, END, text=“女”)
for itm in data:
if(itm[3]=="男"):
tree.insert(man,END,text=itm[1],values=itm)
else:
tree.insert(wom,END,text=itm[1],values=itm)
tree.pack(expand=1, fill=BOTH)
main.mainloop()
代码执行结果:
![02_as_tree.png](https://img-blog.csdnimg.cn/img_convert/7acb040a760ff015031e49cc85502024.png)
如果将代码中 `displaycolumns="#all"` 修改为 `displaycolums=()` ,树的效果如下:
![03_as_tree2.png](https://img-blog.csdnimg.cn/img_convert/4cec4de0fc298066219c521b9d270970.png)
### []( )Treeview 插入子节点
向 Treeview 对象中插入一个子节点,需要使用 `insert` 方法:
itm = tree.insert(options)
`insert` 函数的返回值,就是插入节点的对象。
参数列表如下:
| 参数 | 描述 |
| --- | --- |
| parent | 指定父节点,如果需要插入根节点,传入`""`。 |
| index | 指定插入位置,`0`表示在头部插入,`END`表示在尾部插入。 |
| text | 指定在图标栏展示的内容,也就是在编号`"#0"`列展示的内容,只有 `show` 参数包含 `tree` 时才能看到。 |
| values | 指定在数据列展示的内容,也就是 `columns` 指定的列。 |
| image | 指定图标栏显示的图标,是一个`PhotoImage`对象 |
### []( )Treeview 事件
Treeview 有三个虚拟事件分别是:
* `<<TreeviewSelect>>`:选中项发生变化时触发该事件;
* `<<TreeviewOpen>>`:当菜单项open=True时触发该事件;
* `<<TreeviewClose>>`:当菜单项open=False时触发该事件;
> 这些事件的使用方法和之前的控件一样,比较简单,下文有案例,不过多解释。
### []( )如何获取当前选中项
获取当前选中项有两种情况,第一种就是单选项的获取,比较简单,而多选项的获取稍微复杂了一点。
#### []( )单选项获取
先使用 Treeview 的 focus() 方法获取当前焦点项,再利用 `set` 方法获取焦点项的值。
获取到的值就是在插入表、树子节点时时指定的 `values` 值。
foc = tree.focus()
val = tree.set(foc)
示例代码如下:
from tkinter import *
from tkinter import ttk
“”"
魏大王学编程(www.weidawang.xyz)
tkinter 实用教程系列
Treeview 事件案例
“”"
def onSelect(e):
itm = tree.set(tree.focus())
print(itm)
pass
main = Tk()
data = [(1, “小明”, 23, ‘男’, ‘2021-09-21’), (2, “小强”, 23, ‘男’, ‘2021-09-21’),
(3, "小红", 23, '女', '2021-09-21'), (4, "铁头", 23, '男', '2021-09-21')]
tree = ttk.Treeview(main, columns=(‘id’, ‘name’, ‘age’, ‘sex’,
'birth'), show="headings", displaycolumns="#all")
tree.heading(‘id’, text=“编号”, anchor=W)
tree.heading(‘name’, text=“姓名”, anchor=W)
tree.heading(‘age’, text=“年龄”, anchor=W)
tree.heading(‘sex’,text=“性别”,anchor=W)
tree.heading(‘birth’, text=“出生日期”, anchor=W)
for itm in data:
tree.insert("",END,values=itm)
tree.pack(expand=1, fill=BOTH)
tree.bind(“<>”,onSelect)
main.mainloop()
![04_get_select.png](https://img-blog.csdnimg.cn/img_convert/a945c3aafd3294ac225b227ca00079b7.png)
#### []( )多选项获取
先使用 Treeview 的 selection() 方法获取所有选中项的 ID,然后再使用 set() 方法获取对应项的值。
selects = tree.selection()
values = tree.set(selects)
使用示例如下:
from tkinter import *
from tkinter import ttk
“”"
魏大王学编程(www.weidawang.xyz)
tkinter 实用教程系列
Treeview 多项选中事件案例
“”"
def onSelect(e):
ss = tree.selection()
for s in ss:
itm = tree.set(s)
print(itm)
pass
main = Tk()
data = [(1, “小明”, 23, ‘男’, ‘2021-09-21’), (2, “小强”, 23, ‘男’, ‘2021-09-21’),
(3, "小红", 23, '女', '2021-09-21'), (4, "铁头", 23, '男', '2021-09-21')]
tree = ttk.Treeview(main, columns=(‘id’, ‘name’, ‘age’, ‘sex’,
'birth'), show="headings", displaycolumns="#all")
tree.heading(‘id’, text=“编号”, anchor=W)
tree.heading(‘name’, text=“姓名”, anchor=W)
tree.heading(‘age’, text=“年龄”, anchor=W)
tree.heading(‘sex’,text=“性别”,anchor=W)
tree.heading(‘birth’, text=“出生日期”, anchor=W)
for itm in data:
tree.insert("",END,values=itm)
tree.pack(expand=1, fill=BOTH)
tree.bind(“<>”,onSelect)
main.mainloop()
执行效果如下:
![05_ms.png](https://img-blog.csdnimg.cn/img_convert/8e70d64d9d781419d486b9137761b25c.png)
#### []( )Tree 选中子节点
存在这样一种需求,在树状结构中,我希望当我选中一个非叶子节点之后,所有的子节点(或者子节点的子节点)的叶子节点都被选中。
例如,当选中树的根节点,所有叶子节点全部被选中。
示例代码如下:
from tkinter import *
from tkinter import ttk
from queue import Queue
“”"
魏大王学编程(www.weidawang.xyz)
tkinter 实用教程系列
Treeview 多级选中
“”"
def onSelect(e):
ss = tree.selection()
q = Queue(maxsize=0)
leafs = []
for itm in ss:
q.put(itm)
while(q.qsize()):
node = q.get()
childs = tree.get_children(node)
if(childs):# note非叶子节点
for c in childs:
q.put(c)
else:
if(node not in leafs):#防止父节点和子节点同时被选中,去重
leafs.append(node)
for leaf in leafs:
print(tree.set(leaf))
pass
main = Tk()
data = [(1, “小明”, 23, ‘男’, ‘2021-09-21’), (2, “小强”, 23, ‘男’, ‘2021-09-21’),
(3, "小红", 23, '女', '2021-09-21'), (4, "铁头", 23, '男', '2021-09-21')]
tree = ttk.Treeview(main, columns=(‘id’, ‘name’, ‘age’, ‘sex’,‘birth’), show=“tree”, displaycolumns=“#all”)
tree.heading(“#0”, text=“学校”, anchor=W)
tree.heading(‘id’, text=“编号”, anchor=W)
tree.heading(‘name’, text=“姓名”, anchor=W)
tree.heading(‘age’, text=“年龄”, anchor=W)
tree.heading(‘sex’, text=“性别”, anchor=W)
tree.heading(‘birth’, text=“出生日期”, anchor=W)
stu_root = tree.insert(“”, END, text=“学生”)
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-oniYmIfS-1715034675578)]
[外链图片转存中…(img-n0gUsjpI-1715034675578)]
[外链图片转存中…(img-6SDipZaH-1715034675579)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!