当前位置:   article > 正文

26-Tkinter 组件-TreeView表格与树状标签_tkinter 表格

tkinter 表格

TreeView表格与树状标签

TreeView介绍

TreeView组件是一个树状结构和表格的结合体。

第一列是树状结构,后几列是列表。

每一行表示一个item,树的item可以分级,每个item有子item,名称对应text标签。每一行的值用values元组里的值表示。

item有5个标签,分别是:textimagevaluesopentags

参数说明

TreeView参数
参数作用
columns值是一个列表。列表里每个元素代表一个列标识符的名称。列表的长度为列的长度。
displaycolumns列表,这里的元素是列表符,表示的是哪些列可以显示以及顺序,或者用‘#all’表示全部显示
height表示要显示几行数据(注意:这个部件的宽度是根据列的多少自动定义的)
padding填充,是个最多4个元素的列表
selectmode定义如何去选择一行。"extended"是可选多行(用Ctrl+鼠标), "browse" 是只能选一行, "none"是不能改变选择,默认是"extended"
show表示这个部件显示哪种功能,“tree”表示仅显示第一列(单树模式),“headings”表示显示除一列的其他列(单列表模式),默认是"tree headings",显示所有列。
注意,‘#0’(第一列)是永远存在的
默认的是显示所有列,参数: show=’tree headings’
只显示列表栏,参数: show=’headings’
只显示树栏,参数:show=’tree’
item参数
选项描述
text树状结构这边的名称。
image树状结构这边的名称的左边加个图。
values列表结构这边每一行的值,values未赋值的列会为空值,超过列的长度会被截断。
open布尔值,代表子item的显示打开或关闭。即是否自动展开
tags与item关联的标记
foreground前景色Foreground
background背景色
font字体
image

TreeView可选事件

  • <<TreeviewSelect>>,代表选择变化时发生;
  • <<TreeviewOpen>>,item的open=True时发生
  • <<TreeviewClose>>,item的open=False时发生

可用 Treeview.focus()Treeview.selection() 可获取 item 或 items.

TreeView方法

方法说明
column(column, option=None, **kw)给各列设置属性,或返回属性。第一个column是列标识符 第二个option,如果不设置则返回所有属性的字典,如果设置则返回那个属性的值。
id:只读属性,返回列名。
anchor:文字在cell里的对齐方式,标准的tk的anchor属性
minwidth: 值,单位是像素,列的最小宽度
stretch: 布尔值,表示列的宽度是否随整个部件的改动而变化。
width:列宽,单位是像素。
提示:如果要设置树状结构那列,用column=“#0”
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介绍。
delete(*items)删除item及其子item
bbox(item, column=None)返回一个item的范围(x,y,width, height),如果column指定了一个列,则返回一个元素范围,如果item不可视,则返回空值。
item(item, option=None, **kw)修改指定item的选项,只传item则为获取指定item
set_children(item, *newchildren)设置一个item的新子item。这里设置了之后实际是全部替换
get_children(item=None)返回一个item的所有子item,这个子item是一个列表形式,如果item没指定,则返回根目录的item
exists(item)返回True,如果item在树里。
detach(*items)断开item及其子item,这里的断开只是不显示,以后还可以链接起来。
focus(item=None)如果不指定item,则返回当前获得焦点的itemid,如果指定item,则让该item获得焦点。若无则返回空值。
selection()-> Tuple[str, …] 返回所选项目的元组。
selection_set(items)items:str 、 List[str] 、 Tuple[str, …],指定的项目成为新的选择。
selection_add(items)items:str 、 List[str] 、 Tuple[str, …],将所有指定的项目添加到选择中。
selection_clear(self, **kw: Any)清除选择
selection_get(self, **kw: Any) -> None返回当前X选择的内容。
关键字参数选择指定选择的名称,默认为PRIMARY。关键字参数displayof指定要在显示器上使用的小部件。关键字参数类型指定要获取的数据的形式,默认为STRING (X11上的除外),其中在STRING之前尝试使用UTF8_STRING。
selection_remove(self, items)items:str 、 List[str] 、 Tuple[str, …],从选择中删除所有指定的项目。
set(item, column=None, value=None)指定item,如果不设定column和value,则返回他们的字典,如果设定了column,则返回该column的value,如果value也设定了,则作相应更改。

option:上面几个查询方法的option参数都可以指定textvaluesimagetagsopen等属性

  • item(item, option=None, **kw)
    查询或修改指定item的选项
  • 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。这里设置了之后实际是全部替换
  • delete(*items)
    删除item及其子item
  • detach(*items)
    断开item及其子item,这里的断开只是不显示,以后还可以链接起来。
  • exists(item)
    返回True,如果item在树里。
  • focus(item=None)
    如果不指定item,则返回当前获得焦点的item,如果指定item,则让该item获得焦点。若无则返回空值。
  • set(item, column=None, value=None)
    指定item,如果不设定column和value,则返回他们的字典,如果设定了column,则返回该column的value,如果value也设定了,则作相应更改。

代码示例

表格代码
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()
  • 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

给表格添加滚动条

# 这里的滚动条和树在一个frame里面
# xy滚动条
y_Scrollbar = Scrollbar(table_area, command=image_tree.yview, orient="vertical")
x_Scrollbar = Scrollbar(table_area, command=image_tree.xview, orient="horizontal")
image_tree.config(yscrollcommand=y_Scrollbar.set, xscrollcommand=x_Scrollbar.set)

y_Scrollbar.place(relx=0.98, rely=0, relwidth=0.02, relheight=0.98)
x_Scrollbar.place(relx=0, rely=0.98, relwidth=0.98, relheight=0.03)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
树状代码
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()
  • 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
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/975505
推荐阅读
  

闽ICP备14008679号