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’

Tkinter (39) 树视图部件 ttk.Treeview

show=’heading’

Tkinter (39) 树视图部件 ttk.Treeview

show=’tree heading’

Tkinter (39) 树视图部件 ttk.Treeview

show=’’

Tkinter (39) 树视图部件 ttk.Treeview

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 协议》,转载必须注明作者和本文链接
Jason Yang
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!