控件之ttk.Treeview表格、树状数据
from tkinter import *from tkinter import ttkroot = Tk()root.title('Treeview表格数据')columns=['1', '2', '3','4','5']tree = ttk.Treeview(root, column=columns,height=20,show='head...
·
from tkinter import *
from tkinter import ttk
root = Tk()
root.title('Treeview表格数据')
columns=['1', '2', '3','4','5']
tree = ttk.Treeview(root, column=columns,height=20,
show='headings'
)
tree.pack()
tree.heading('1', text='学号')
tree.heading('2', text='姓名')
tree.heading('3', text='性别')
tree.heading('4', text='成绩')
tree.heading('5', text='名次')
tree.column('1', width=100,anchor='center')
tree.column('2', width=100, anchor='center')
tree.column('3', width=100, anchor='center')
tree.column('4', width=100, anchor='center')
tree.column('5', width=100, anchor='center')
Z = ['0001','赵一','男','658','1']
Q = ['0002','钱二','男','648','2']
S = ['0003','孙三','女','638','3']
L = ['0004','李四','女','628','4']
number = ['001','002','003','004']
name = ['赵一','钱二','孙三','李四']
gender= ['男','男','女','女']
score = ['658','648','638','628']
rank = ['1','2','3','4']
'''
函数语法
range(start, stop[, step])
参数说明:
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
'''
for i in range(min(len(number), len(name), len(gender), len(name), len(name))): # 写入数据
tree.insert('', i, values=(number[i],name[i],gender[i],score[i],rank[i]))
'''
#排序部分1:
def treeviewrank(tv, col, reverse): # Treeview、列名、排列方式
l = [(tv.set(k, col), k) for k in tv.get_children('')]
l.sort(reverse=reverse) # 排序方式
# rearrange items in sorted positions
for index, (val, k) in enumerate(l): # 根据排序后索引移动
tv.move(k, '', index)
tv.heading(col, command=lambda: treeviewrank(tv, col, not reverse)) # 重写标题,使之成为再点倒序的标题
'''
def set_itemvalue(event):
for item in tree.selection():
item_text = tree.item(item, "values")
print(item,item_text)
#确定编辑的行、列
column = tree.identify_column(event.x) # 列
row = tree.identify_row(event.y) # 行
print(column, row)
cn = int(str(column).replace('#', '')) # 列
rn = int(str(row).replace('I', '')) # 行
print(cn, rn)
#Entry创建摆放
entryedit = Text(root, width=14, height=1)
entryedit.place(x=0 + (cn - 1) * 100, y=6 + rn * 20)
#treevview值=entry值
def saveedit():
tree.set(item, column=column, value=entryedit.get(0.0, "end"))
entryedit.destroy()
okb.destroy()
#按钮创建摆放
okb = Button(root, text='OK',command=saveedit)
okb.place(x=90 + (cn - 1) * 100, y=3 + rn * 20)
tree.bind('<Double-1>', set_itemvalue)
def newrow():
number.append('number')
name.append('name')
gender.append('gender')
score.append('score')
rank.append('rank')
tree.insert('', len(number) - 1, values=(number[len(number) - 1], name[len(name) - 1],
gender[len(gender) - 1], score[len(score) - 1], rank[len(rank) - 1]))
tree.update()
newb.place(x=200, y=(len(number) - 1) * 20 + 45)
newb.update()
newb = Button(root, text='新建', width=10, command=newrow)
newb.place(x=200, y=(len(number) - 1) * 20 + 45)
'''
#排序部分2:
for col in columns: # 绑定函数,使表头可排序
tree.heading(col, text=col, command=lambda _col=col: treeviewrank(tree, _col, False))
'''
def delcontent():
items = tree.get_children()
for item in items:
tree.delete(item)
Button(root,text='删除列表内容',command=delcontent).pack()
def showcontent(event):
for num in tree.selection():
numname = tree.item(num, "values")
from tkinter import messagebox
messagebox.showinfo(title=None,message=numname[1])
tree.bind('<ButtonRelease-1>', showcontent)
'''附加1:
# 1.遍历表格
t = treeview.get_children()
for i in t:
print(treeview.item(i,'values'))
# 2.绑定单击离开事件
def treeviewClick(event): # 单击
for item in tree.selection():
item_text = tree.item(item, "values")
print(item_text[0:2]) # 输出所选行的第一列的值
tree.bind('<ButtonRelease-1>', treeviewClick)
'''
tree1=ttk.Treeview(root)
tree1.pack()
#参数:parent, index, id=None, **kw (父节点,排序,id不能相同,显示出的文本)
subtree1=tree1.insert("",0,id="100",text='中国China',values=("1")) # ""表示父节点是根
tree1.insert(subtree1,0,id="101",text="中国北京",values=("3")) # text表示显示出的文本,values是隐藏的值
tree1.insert(subtree1,1,id="102",text="中国河北",values=("3"))
tree1.insert(subtree1,2,id="103",text="中国上海",values=("3"))
tree1.insert(subtree1,3,id="104",text="中国广州",values=("3"))
subtree2=tree1.insert("",1,id="200",text="美国USA",values=("4"))
tree1.insert(subtree2,0,id="201",text="美国加州",values=("5"))
root.mainloop()

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)