![]() |
仗义的竹笋 · UnmanagedType Enum ...· 4 月前 · |
![]() |
慷慨的蜡烛 · edge播放youtube视频 ...· 11 月前 · |
![]() |
无邪的打火机 · 将不规则网格转换为规则网格-腾讯云开发者社区 ...· 1 年前 · |
![]() |
阳光的金鱼 · C++容器vector的数组片段截取操作_c ...· 1 年前 · |
![]() |
没有腹肌的长颈鹿 · 网页如何与小程序交互通信_小程序 ...· 1 年前 · |
使用selection_remove()把指定的item从选择中移除
使用table.tag_has()/table.tag_configure()/table.tag_bind()
使用index()方法返回item在items列表中的整数索引
使用identify()/identify_row()/identify_column()/identify_region()/identify_element()方法返回指定组件的描述)
TreeView是它是用来展示树形结构或列表结构的一个UI控件;第一列用来表示树状结构,除第一列外后面几列的是列表结构
import tkinter.ttk as ttk
属性 | 描述 |
master | 父布局 必要 |
columns |
columns 值为一个列表,列表里每个元素代表一个列标识符的名称 必要 例:columns=['序号', '权限', '用户', '密码'] |
displaycolumns |
列标识符列表(符号索引或整数索引),指定显示哪些数据列以及它们出现的顺序,或者字符串“#all” 例:定义了上面的列之后 使用 displaycolumns=[2, 3, 1] 显示的列和顺序是: 用户 密码 权限 |
height | 可见的行数,显示几行数据 (若实际数据少于设置的行数,则按实际数据显示) |
padding |
内部填充,填充是一个最多包含四个长度列表(左,上,右,下) 例:padding=[20,10,20,10] 左边填充:20 上面填充:20 右边填充:20 下面填充:20 例:padding=[50]上下左右各填充:50 |
selectmode |
“extended”(默认值)可以选择多个(行)项目(用Ctrl+鼠标) “browse”每次只会选中一行。 “none”不更改选择 例:selectmode=“extended” |
show |
"tree headings"表示显示所有列,默认值(列表模式) “tree”表示仅显示第一列(树模式) “headings”表示显示除一列的其他列(列表模式) 注意:‘#0’(第一列)是永远存在的 例: show="headings" |
style | TreeView的样式 |
xscrollcommand |
X轴滚动条的绑定 |
yscrollcommand | Y轴滚动条的绑定 |
属性 | 描述 | ||||||||||
text | 显示的文本标签 | ||||||||||
image | 显示在item左侧的Tk Image | ||||||||||
values |
与该item相关联的值的列表,每个item应该具有与列数相同数量的值 如果值少于列数,则假定其余值为空。如果值多于列数,则忽略额外的值 |
||||||||||
open |
True 显示item False 隐藏item |
||||||||||
tags |
与此item相关联的标签列表
|
表格创建好后就可以操作表格通过列标识
列标识符采用以下3种形式 |
1. 创建表格时列名称列表中的符号名称 例: ['序号', '权限', '用户', '密码'] 列表 或 ('序号', '权限', '用户', '密码') 元组 |
2. 整数n,指定第n个数据列 例: [1, 2, 3, 4] 列表 或 (1, 2, 3, 4) 元组 |
3. 形式为#n的字符串,其中n为整数,指定显示的第n列 例: ["#1", "#2", "#3", "#4"] 列表 或 ("#1", "#2", "#3", "#4") 元组 |
item的值的显示顺序可能与它们存储的顺序不同
列#0总是指向树列,即使没有指定show= " tree "(单树模式)。
列号是item值列表的索引,树标签显示在第0列中。
如果选项displaycolumns没有设置,那么数据列n将显示在列#n+1中;列#0总是指向树列。
事件 | 描述 |
<<TreeviewSelect>> | 当选择更改时发生 |
<<TreeviewOpen>> | item的open=True时发生 |
<<TreeviewClose>> | item的open=False时发生 |
可用 Treeview.focus() 和 Treeview.selection() 可获取 item 或 items
事件 | 代码 |
鼠标左键单击按下 | 1/Button-1/ButtonPress-1 |
鼠标左键单击松开 | ButtonRelease-1 |
鼠标右键单击 | 3 |
鼠标左键双击 | Double-1/Double-Button-1 |
鼠标右键双击 | Double-3 |
鼠标滚轮单击 | 2 |
鼠标滚轮双击 | Double-2 |
鼠标移动 | B1-Motion |
鼠标移动到区域 | Enter |
鼠标离开区域 | Leave |
获得键盘焦点 | FocusIn |
失去键盘焦点 | FocusOut |
键盘事件 | Key |
回车键 | Return |
控件尺寸变化 | Configure |
方法 | 描述及返回值 | ||||||||||||
heading
(
column
,
option=None
,
**kw
)
|
查询或设定指定列的标题选项。
如果指定了选项,则返回该选项的值。 否则,将选项设置为相应的值
|
||||||||||||
column
(
column
,
option=None
,
**kw
)
|
查询或设定指定列的选项
column是列标识符
如果指定了选项,则返回该选项的值 否则,将选项设置为相应的值
|
||||||||||||
get_children
(
item=None
)
|
返回属于item的子元素列表
如果item未指定,则返回根目录的item |
||||||||||||
set_children
(
item
,
*newchildren
)
|
用newchildren替换item的子元素
不指定newchildren会导致分离item的子元素 一般用于树形结构中 |
||||||||||||
delete
(
*items
)
|
删除所有指定items及其所有子item
根item目不能被删除 |
||||||||||||
detach
(
*items
)
|
在树中断开(隐藏)items及子item
重新显示可以move()方法
|
||||||||||||
move
(
item
,
parent
,
index
)
|
将item移动到parent下的列表中的index位置
如果大于或等于子节点的数量,则将其移动到最后 如果项目被分离,它将被重新添加 |
||||||||||||
exists
(
item
)
|
如果树中存在指定的item,则返回True | ||||||||||||
focus
(
item=None
)
|
如果指定了item,则将焦点项设置为item 否则,返回当前的焦点项 若无则返回空值 使用focus()方法并不会让获得focus的item被高亮显示 如果要高亮显示使用selection_set()方法 |
||||||||||||
bbox
(
item
,
column=None
)
|
返回指定item的边界框(x, y, width, height) 如果指定了column,则返回该单元格的边界框 如果项目是不可见的(例如它是一个关闭item的子代或滚动出屏幕),返回一个空字符串 |
||||||||||||
identify
(
component
,
x
,
y
)
|
在x和y给出的点下返回指定组件的描述,如果在该位置没有这样的组件,则返回空字符串
|
||||||||||||
identify_row
(
y
)
|
返回位置为y的item的ID | ||||||||||||
identify_column
(
x
)
|
返回位置x的单元格的数据列标识符 树列的ID为#0 |
||||||||||||
Tk 8.6. |
返回一个
|
||||||||||||
Tk 8.6. |
返回位置为x, y的元素 | ||||||||||||
index
(
item
)
|
返回子item在父items的列表中的i整数索引 | ||||||||||||
insert
(
parent
,
index
,
iid=None
,
**kw
)
|
创建新item并返回新创建item的标识符 parent是父item的ID,若为空字符串则用于创建新根item串 Index是一个整数,或“end”,指定在父item列表中插入新item的位置 如果index小于或等于0,则在开始处插入新节点;如果index大于或等于当前子节点的数量,则将其插入到末尾 iid它被用作item标识符;Iid不能已经存在于树中。否则,将生成一个新的惟一标识符,不指定可自动生成 **kw 有关可用列表,请参阅上面TreeView的item选项 |
||||||||||||
item
(
item
,
option=None
,
**kw
)
|
查询或修改指定item的选项
如果指定了选项,则返回该选项的值 否则,将选项设置为kw给出的相应值 |
||||||||||||
next
(
item
)
|
返回下一个与item同级的item的标识符 | ||||||||||||
parent
(
item
)
|
返回item的父元素的ID | ||||||||||||
prev
(
item
)
|
返回item的前一个同级的标识符 | ||||||||||||
reattach
(
item
,
parent
,
index
)
|
Treeview.move()的别名 | ||||||||||||
see
(
item
)
|
设置item是可见的。
将item的所有祖先open选项设置为True,并在必要时滚动Treeview,以便item位于树的可见部分中 |
||||||||||||
selection
(
selop=None
,
items=None
)
|
如果未指定selop,则返回选中的item,列表形式
否则,将按照以下选择方法进行操作
|
||||||||||||
selection_set
(
*items
)
|
Items成为新的选择 在3.6版更改,项可以作为单独的参数传递,而不只是作为单个元组 |
||||||||||||
selection_add
(
*items
)
|
向选择items中添加item 在3.6版更改,项可以作为单独的参数传递,而不只是作为单个元组 |
||||||||||||
selection_remove
(
*items
)
|
从选择items中删除item
在3.6版更改,项可以作为单独的参数传递,而不只是作为单个元组 |
||||||||||||
selection_toggle
(
*items
)
|
切换items中每个item的选择状态
在3.6版更改,item可以作为单独的参数传递,而不只是作为单个元组 |
||||||||||||
set
(
item
,
column=None
,
value=None
)
|
返回指定item的列/值对字典 只有item和column,返回指定column的value当前值。 item和column和value同时使用,则修改item中指定的列的value |
||||||||||||
tag_bind
(
tagname
,
sequence=None
,
callback=None
)
|
将给定事件序列的回调绑定到标记tagname 当事件被交付给item时,将调用item的每个标签选项的回调 |
||||||||||||
tag_configure
(
tagname
,
option=None
,
**kw
)
|
查询或修改指定标记名的选项 如果指定了option,则为指定的标记名返回该选项的值。否则,将item设置为给定标记名的相应值 如果没有给出kw,则返回tagname的item设置的字典 |
||||||||||||
Tk 8.6. |
若指定了item,则根据指定的item是否具有给定的标记名返回True或False 否则,返回具有指定标记的所有item的列表 |
||||||||||||
xview
(
*args
)
|
查询或修改树视图的水平位置 | ||||||||||||
yview
(
*args
)
|
查询或修改树视图的垂直位置 |
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 定义表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 定义表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 定义列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
# insert()方法插入数据
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
# get_children用法
print('根目录所有items:' + str(self.table.get_children()))
print(self.table.get_children('I001'))
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
输出结果:
根目录所有子元素列表:('I001', 'I002', 'I003', 'I004', 'I005', 'I006', 'I007', 'I008', 'I009')
指定item所有子元素列表:()
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
#使用focus()方法并不会让获得focus的item被高亮显示;如果要高亮显示使用selection_set()方法
self.table.focus('I001')
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
# 将item的所有祖先open选项设置为True,并在必要时滚动Treeview,以便item位于树的可见部分中
self.table.see('I009')
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
运行结果可以看到表格滚动到最后一条数据,数据为可视
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
self.table.selection_set('I003')
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
# 当表格选择改变触发 自定义的方法
self.table.bind('<<TreeviewSelect>>', self.selection)
def selection(self, event):
# selection()方法可获取item或items
print('选择的是:' + str(event.widget.selection())) #event.widget获取Treeview对象
return "break"
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
运行结果为:
选择的是:('I001', 'I002', 'I003')
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
# 选设定新的选则
self.table.selection_set('I003')
# 追加两个选择
self.table.selection_add('I001', 'I004')
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
# 设定新的items为选择
self.table.selection_set('I003')
# 添加新的items为选择
self.table.selection_add('I001', 'I004')
# 移除选择中的items
self.table.selection_remove('I001')
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
# 返回item所有数据字典
print('item所有数据字典为:' + str(self.table.set('I001')))
# 返回item指定列的数据字典
print('item指定列的数据字典为:' + str(self.table.set('I001', column='#3')))
# 修改item指定列的数据
self.table.set('I001', column='#3', value='admin')
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for i, data in enumerate(tableValues):
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data, tags=str(i))
print('item中是否含有该tag:' + str(self.table.tag_has('0', 'I001')))
print('含有该tag的items:' + str(self.table.tag_has('0')))
print('tagname的选项/属性数据字典:' + str(self.table.tag_configure('1')))
print('tagname的指定选项值:' + str(self.table.tag_configure('1', option='anchor')))
# 对tagname使用kw中的参数设置有关属性
self.table.tag_configure('1', text='你好')
print('tagname的指定选项值:' + str(self.table.tag_configure('1')))
self.table.tag_bind('1', '<Double-1>', callback=self.bind())
def bind(self):
print('指定事件绑定')
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
执行后的结果为:
item中是否含有该tag:True
含有该tag的items:('I001',)
tagname的选项/属性数据字典:{'text': '', 'image': '', 'anchor': '', 'background': '', 'foreground': '', 'font': ''}
tagname的指定选项值:
tagname的指定选项值:{'text': '你好', 'image': '', 'anchor': '', 'background': '', 'foreground': '', 'font': ''}
指定事件绑定
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for i, data in enumerate(tableValues):
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data, tags=str(i))
print('返回下一个与item同级的item的标识符:' + str(self.table.next('I003')))
print('返回item的父元素的ID:' + str(self.table.parent('I003')))
print('返回item的前一个同级的标识符:' + str(self.table.prev('I003')))
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
执行后的结果为:
返回下一个与item同级的item的标识符:I004
返回item的父元素的ID:
返回item的前一个同级的标识符:I002
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
self.table.bind('<<TreeviewSelect>>', self.select)
def select(self, event):
print('选则的行在items的列表中的整数索引:' + str(self.table.index(event.widget.selection())))
return "break"
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
选则第二行数据执行结果:
选则的行在items的列表中的整数索引:1
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
# delete用法 删除第一个item也就是第一行数据
self.table.delete('I001')
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
# detach用法隐藏第一行数据
self.table.detach('I001')
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
# detach方法隐藏第一行数据
self.table.detach('I001')
# move方法把上面隐藏的第一行数据重新移动到指定的位置重新显示
self.table.move('I001','', 1)
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
# exists()方法判断item是否存在
print("item是否存在:" + str(self.table.exists('I001')))
print("item是否存在:" + str(self.table.exists('I0012')))
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
运行结果:
item是否存在:True
item是否存在:False
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
self.table.bind('<<TreeviewSelect>>', self.select)
def select(self, event):
# bbox()返回指定item的边界框
print('选择的是:' + str(event.widget.selection())) #event.widget获取Treeview对象
print('边界框为:' + str(self.table.bbox(event.widget.selection(), column=1)))
return "break"
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
运行结果为:
选择的是:('I001',)
边界框为:(401, 25, 200, 40)
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
xscroll = Scrollbar(self, orient=HORIZONTAL)
yscroll = Scrollbar(self, orient=VERTICAL)
xscroll.pack(side=BOTTOM, fill=X)
yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=xscroll.set, # x轴滚动条
yscrollcommand=yscroll.set # y轴滚动条
xscroll.config(command=self.table.xview)
yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for data in tableValues:
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data)
# 鼠标单击触发
self.table.bind('<ButtonRelease-1>', self.select)
def select(self, event):
# identify()返回指定组件的描述
x = event.x
y = event.y
print('选择的是:' + str(event.widget.selection())) # event.widget获取Treeview对象
print('鼠标单击的x坐标:'+ str(x))
print('鼠标单击的Y坐标:' + str(y))
print('区域描述为:' + str(self.table.identify('region', x, y)))
print('项目描述为:' + str(self.table.identify('item', x, y)))
print('列描述为:' + str(self.table.identify('column', x, y)))
print('行描述为:' + str(self.table.identify('row', x, y)))
print('要素描述为:' + str(self.table.identify('element', x, y)))
print('位置y的item的id:' + str(self.table.identify_row(y)))
print('位置x的单元格的数据列标识符:' + str(self.table.identify_column(x)))
# 等同 self.table.identify('region', x, y)
print('xy位置的区域:' + str(self.table.identify_region(x, y)))
# 等同 self.table.identify('item', x, y)
print('xy位置的要素:' +str(self.table.identify_element(x, y)))
return "break"
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
鼠标单击第一行第二列后执行结果:
选择的是:('I001',)
鼠标单击的x坐标:297
鼠标单击的Y坐标:37
区域描述为:cell
项目描述为:I001
列描述为:#1
行描述为:I001
要素描述为:text
位置y的item的id:I001
位置x的单元格的数据列标识符:#1
xy位置的区域:cell
xy位置的要素:text
from tkinter import *
import tkinter.ttk as ttk
import tkinter as tk
from PIL import Image, ImageTk
class MyTable(ttk.Frame):
def __init__(self, master):
self.master = master
super().__init__(master)
self.pack() #frame加入root
tableColumns = ['序号', '权限', '用户', '密码']
tableValues = [
["1", "0", "user1", "password1"],
["2", "1", "user2", "password2"],
["3", "1", "user3", "password3"],
["4", "2", "user4", "password4"],
["5", "2", "user5", "password5"],
["6", "3", "user4", "password6"],
["7", "2", "user7", "password7"],
["8", "2", "user8", "password8"],
["9", "1", "user9", "password9"]
# 设置滚动条
self.xscroll = Scrollbar(self, orient=HORIZONTAL, command=self.on_X_ScrollCommand)
self.yscroll = Scrollbar(self, orient=VERTICAL, command=self.on_Y_ScrollCommand)
self.xscroll.pack(side=BOTTOM, fill=X)
self.yscroll.pack(side=RIGHT, fill=Y)
self.table = ttk.Treeview(
master=self, # 父容器
columns=tableColumns, # 列标识符列表
height=30, # 表格显示的行数
show='tree headings', # 隐藏首列
style='Treeview', # 样式
xscrollcommand=self.xscroll.set, # x轴滚动条
yscrollcommand=self.yscroll.set # y轴滚动条
#self.xscroll.config(command=self.table.xview)
#self.yscroll.config(command=self.table.yview)
self.table.pack() #TreeView加入frame
self.table.heading(column="#0", text="用户头像", anchor=CENTER, command=lambda: print("您点击了“用户头像”列")) # 设置#0列表头
for i in range(len(tableColumns)):
self.table.heading(column=tableColumns[i], text=tableColumns[i], anchor=CENTER, command=lambda: print(tableColumns[i])) # 设置除#0列以外的表头
self.table.column(tableColumns[i], minwidth=100, anchor=CENTER ,stretch=True) # 设置列
style = ttk.Style(master)
style.configure('Treeview', rowheight=40)
self.image = ImageTk.PhotoImage(Image.open("./butterfly.png"))
for i, data in enumerate(tableValues):
self.table.insert('', 'end', text="这里是头像", image=self.image, value=data, tags=str(i))
self.entry = tk.Entry(self, highlightthickness=1, bg='#F3F3F4', textvariable='')
self.entry.bind("<FocusIn>", self.on_FocusIn)
self.entry.bind("<FocusOut>", self.on_FocusOut)
self.table.bind("<Double-1>",self.on_Double_1)
self.table.bind("<MouseWheel>", self.on_MouseWheel)
self.entry.bind("<Return>", self.on_Return)
# 焦点在输入条时触发
def on_FocusIn(self, event):
# 焦点离开输入条时触发
def on_FocusOut(self, event):
text = self.entry.get() # 获取输入条内容
self.table.set(self.row, self.column, text) # 表格数据设置为输入条内容
self.entry.place_forget() # 隐藏输入条
#self.xscroll.pack(side=BOTTOM, fill=X)
#self.yscroll.pack(side=RIGHT, fill=Y)
# 鼠标左键双击触发
def on_Double_1(self, event):
if str(event.widget) == ".!mytable.!treeview": # 双击触发的是否为表格
table = event.widget
for item in table.selection(): # 取消表格选取
table.selection_remove(item)
self.row = table.identify_row(event.y) # 点击的行
self.column = table.identify_column(event.x) # 点击的列
col = int(str(table.identify_column(event.x)).replace('#', '')) # 列号
text = table.item(self.row, 'value')[col - 1] # 单元格内容
x = table.bbox(self.row, column=col - 1)[0] # 单元格x坐标
y = table.bbox(self.row, column=col - 1)[1] # 单元格y坐标
width = table.bbox(self.row, column=col - 1)[2] # 单元格宽度
height = table.bbox(self.row, column=col - 1)[3] # 单元格高度
self.entry.focus_set() # 输入条获取焦点
self.entry.delete(0, END) # 清除输入条中的内容
self.entry.place(x=x, y=y, width=width, height=height) # 设置输入条位置及长宽
self.entry.insert(0, text) # 输入条插入内容
# 鼠标滚轮触发
def on_MouseWheel(self, event):
if self.entry.winfo_viewable()==1: #如果输入条可见
text = self.entry.get() # 获取输入条内容
self.table.set(self.row, self.column, text) # 表格数据设置为输入条内容
self.entry.place_forget() # 隐藏输入条
# 回车键触发
def on_Return(self, event):
if self.entry.winfo_viewable() == 1: # 如果输入条可见
self.entry.place_forget() # 隐藏输入条
text = self.entry.get() # 获取输入条内容
self.table.set(self.row, self.column, text) # 表格数据设置为输入条内容
# X轴滚动条拖动触发
def on_X_ScrollCommand(self, *xx):
if self.entry.winfo_viewable() == 1: # 如果输入条可见
text = self.entry.get() # 获取输入条内容
self.table.set(self.row, self.column, text) # 表格数据设置为输入条内容
self.entry.place_forget() # 隐藏输入条
self.table.xview(*xx) # 表格横向滚动
# Y轴滚动条拖动触发
def on_Y_ScrollCommand(self, *xx):
if self.entry.winfo_viewable() == 1: # 如果输入条可见
text = self.entry.get() # 获取输入条内容
self.table.set(self.row, self.column, text) # 表格数据设置为输入条内容
self.entry.place_forget() # 隐藏输入条
self.table.yview(*xx) # 表格纵向滚动
if __name__ == '__main__':
root = tk.Tk()
root.geometry('800x300')
root.title("TreeView演示")
MyTable(root)
root.mainloop()
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、TreeView的引入 二、TreeView的属性 二、TreeView的创建 1.引入库 2.读入数据 总结 前言TreeView是它是用来展示树形结构或列表结构的一个UI控件;第一列用来表示树状结构,除第一列外后面几列的是列表结构一、TreeView的引入import tkinter.ttk as ttk二、TreeView的属性属性 描述 m
![]() |
无邪的打火机 · 将不规则网格转换为规则网格-腾讯云开发者社区-腾讯云 1 年前 |