Tkinter (39) 树视图部件 ttk.Treeview
ttk 树视图部件说明
部件可以包含多个列位, 第一列称为图标列, 用来显示收起或展开的图标, 其他列可以用来显示其他的资讯.
项目 | 说明 |
---|---|
item | 在树结构中, 每一个项目 |
iid | 每一个项目都有一个各自单独的识别码 |
child | 子项目 |
parent | 父项目, 最顶层为空字符串 |
ancestor | 父项以上的所有项目 |
visible | 最顶层的项目, 永远可见, 只有父项被展开, 子项以下的项目才可能看得见 |
descendant | 子项以下所有的项目 |
tag | 每一个项目可以对应到一个或多个的标签, 使用标签来对该群体的项目作一些设定或动作等 |
ttk 树视图部件的创建及其选项
w = ttk.Treeview(parent, option=value, ...)
选项 | 说明 |
---|---|
class_ | 部件分类名称,建立后不能改变 |
columns | 序列的识别码字符串, 该序列不包含图标列的识别码, 第一列图标列的识别码永远为 "#0" |
cursor | 鼠标悬停在按钮上时显示的鼠标, 内定为空字符串, 继承父部件的选项 |
displaycolumns | 指定各列显示与否及其顺序, "#all" 代表全部, 或整数的列表, 识别码列表, 各列的内容必须按此顺序提供 |
height | 部件的行数 |
padding | 部件内部子部件的外部间隔, 可以是单一尺寸, 或最多 4-tuple, 顺序为 (left, top, right, bottom), 省略部份, 由其他代替, 如 a=(a,a, a,a), (a,b)=(a,b,a,b), (a,b,c)=(a,c,b,c), (a,b,c,d) |
select | 项目被选择的模式, 'browse' (单选) /'extended' (可多选) / 'none' (不可选) |
show | 'tree' 不显示表头显示图标栏 'headings' 不显示图标栏显示表头 'tree headings' 显示表头及图标栏 (预设) '' 表头及图标栏都不显示。 |
style | 生成部件的样式 |
takefocus | 键盘聚焦, '' (内定) 同 True, False 或 True |
ttk 树视图部件的方法
方法 | 说明 |
---|---|
bbox(item, column=None) | 项目列所在的左上角座标及尺寸, 返回 (x, y, width, height), 如果项目不可见, 返回空字符串; 如果没给 column 参数, 返回的是整行的座标及尺寸 |
column(cid, option=None, **kw) | 设置某列的选项, 使用kw, 查询使用 option; 如果没给 option 及 kw, 返回字典值; 选项有 anchor - 该列的定位,内定为 'w' id - 列名, 唯读 minwidth - 最小列寛点素, 预设值为 20 stretch - 列寛可否跟着部件尺寸变化时调整, 预设值为 1 width - 预设列寛点素, 内定为 200 |
delete(*items) | 删除项目, 包含其所有的子项 |
detach(*items) | 从可见的列表中移除, 项目仍然存在, 包含其所有的子项, 使用 move 返法还原 |
exists(iid) | 部件中是否包含该项目, 不管是否可见 |
focus([iid]) | 设置或返回聚焦, 无聚焦项目, 返回空字符串 |
get_children([item]) | 返回子项目 tuple, 无 item 参数, 则为最顶层 |
heading(cid, option=None, **kw) | 设置标题列的选项, 使用 kw, 查询使用option; 如果没给option 及 kw, 返回字典值; 选项有 anchor - 定位, 内定为'w' command - 点击时回调函数 image - 图片 text - 文本字符串 |
identify_column(x) | 返回 x 座标对应的列 '#n', 不论图标列是否可见, n:0 为图标列, 其他列都是从 1 开始排起 |
identify_element(x, y) | 在座标 (x, y) 处的元件名, 无则为空字符串 |
identify_region(x, y)) | 在座标(x, y) 处部位的字符串 'nothing' 'heading' (标题列) 'separator' (标题列分隔处) 'tree' (图标列) 'cell' (其他项目列) |
identify_row(y) | 返回 y 座标对应的行的 iid, 无则返回空字符串 |
index(iid) | 返回项目 iid 相对于父项的索引 |
set_children(item, *newChildren) | 设置序列的项目为 item 的子项, 原有的子项不保留 |
insert(parent, index, iid=None, **kw) | 父项 parent 下插入子项, 最顶层为空字符串, index 为插入处的索引, 最后一项使用 'end'; 使用 iid 作为该项的识别码, 无则自动设置并返回. kw 选项有 image - 图标列图标右边的图片 open - 项目是否开启, True 子项目会可见 tags - 指定相关的标签,单一或序列的字符串 text - 图标列中图标/图片右边的字符串 values - 各列的资料项, 不够长度, 其他为空白, 太多长度会被忽略 |
item(iid[, option[, **kw]]) | 设置返回项目的选项, 设置使用 kw, 返回使用 option, 都无则返回所有选项字典值 |
move(iid, parent, index) | 移动项目 iid 到某一父项 parent 的某一个索引处 |
next(iid) | 如果iid 项目不是最顶层项目, 返回其父项的下一个子项 iid, 无则返回空字符串; 如果是最顶层项目, 则返回下一个最顶层项目的iid, 无则返回空字符串 |
parent(iid) | 返回父项的 iid, 如果已是最顶层项目, 则返回空字符串 |
prev(iid) | 如果iid 项目不是最顶层项目, 返回其父项的前一个子项iid, 无则返回空字符串; 如果是最顶层项目, 则返回前一个最顶层项目的iid, 无则返回空字符串 |
see(iid) | 使项目 iid 可见, 其子项以全都展开 |
selection() | 选择项目的元组 |
selection_add(items) | 于选择项目中, 添加单一或序列的项目 |
selection_remove(items) | 于选择项目中, 去掉单一或序列的项目 |
selection_set(items) | 设置单一或序列的项目为选择项目 |
selection_toggle(items) | 变更单一或序列的项目的选择状态 |
set(iid, column=None, value=None) | 设置或返回项目的列值, 只有 iid 参数时, 返回字典值 |
tag_bind(tagName, sequence=None, callback=None) | 绑定标签 tagName 的事件 sequence 到回调函数 func; 只有前两个参数, 则返回事件相关的函数; 只有第一个参数, 则返回所有相关函数的列表 |
tag_configure(tagName, option=None, **kw) | 设置或查询标签的项目的选项, 设置使用 kw, 查询使用 option, 如果两者都无提供, 会返回选项的字典值; kw 选项有 'background' - 背景颜色 'font' - 文本字体 'foreground' - 前景颜色 'image' - 图片 |
tag_has(tagName[, iid]) | 返回标签所包含的所有项目的列表, 如果另提供 iid 参数, 返回标签中是否有 iid 项目 |
xview(*args) | 供水平滚动条 scrollbar 选项 command 使用 |
yview(*args) | 供垂直滚动条 scrollbar 选项 command 使用 |
ttk 树视图部件的虚拟事件
某些部件的状态改变时, 会产生一个虚拟事件
事件 | 说明 |
---|---|
"<<TreeviewSelect>>" | 选择内容改变 |
"<<TreeviewOpen>>" | 项目被展开时 |
"<<TreeviewClose>>" | 项目被收合时 |
范例视窗及代码
show=’tree’
show=’heading’
show=’tree heading’
show=’’
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
columns = ['Col #1', 'Col #2', 'Col #3']
treeview = ttk.Treeview(root, columns=columns)
treeview.pack()
for i in range(10):
treeview.insert('', 'end', iid=i, text=f'Line {i}', values=[1,2,3])
treeview.heading("#0", text="Col #0")
for col in columns:
treeview.heading(col, text=col)
for b in ('tree', 'headings', 'tree headings', ''):
button = tk.Button(root, text=b, width=len('tree headings'), command=lambda text=b:treeview.configure(show=text))
button.pack(side=tk.LEFT)
root.mainloop()
本作品采用《CC 协议》,转载必须注明作者和本文链接