python ttk Treeview的插入、清空、各种点击事件、获取条目值、标题单击排序
发布日期:2021-06-30 15:01:04 浏览次数:2 分类:技术文章

本文共 12609 字,大约阅读时间需要 42 分钟。

~

昨天整了一天Tkinter的treeview,发现中文的教程乃至提问都很少,其中两个问题的解决都是靠steakoverflow上找到的……

在这里放出来我遇到并解决的问题,大家以后可能遇到的话就能省点事了~

 

插入方法:

import tkinter    
from tkinter
import ttk
# 导入内部包
li = [
'王记',
'12',
'男']
root = tkinter.Tk()
root.title(
'测试')
tree = ttk.Treeview(root,columns=[
'1',
'2',
'3'],show=
'headings')
tree.column(
'1',width=
100,anchor=
'center')
tree.column(
'2',width=
100,anchor=
'center')
tree.column(
'3',width=
100,anchor=
'center')
tree.heading(
'1',text=
'姓名')
tree.heading(
'2',text=
'学号')
tree.heading(
'3',text=
'性别')
tree.insert(
'',
'end',values=li)
tree.grid()
root.mainloop()

(为了省点事就不自己敲了)代码来自博客园提问:https://q.cnblogs.com/q/105829/#a_226277

 

tree.insert('','end',values=li)

 

关于“首列很宽”的问题:https://segmentfault.com/q/1010000004206667?sort=created

 

设置show属性为 headings 即可隐藏首列。

ttk.Treeview(frame,height=18, show="headings", columns=('a','b','c','d','e','f'))

 

配上一个还可以的综合一点的例子https://www.cnblogs.com/Tommy-Yu/p/4156014.html

 

清空方法:

参考stackoverflow的提问https://stackoverflow.com/questions/32511843/delete-and-edit-items-in-treeview-tkinter

代码是对上面的代码添加的

import tkinter    
from tkinter import ttk # 导入内部包
li = ['王记','12','男']
root = tkinter.Tk()
root.title('测试')
tree = ttk.Treeview(root,columns=['1','2','3'],show='headings')
tree.column('1',width=100,anchor='center')
tree.column('2',width=100,anchor='center')
tree.column('3',width=100,anchor='center')
tree.heading('1',text='姓名')
tree.heading('2',text='学号')
tree.heading('3',text='性别')
tree.insert('','end',values=li)
tree.grid()
def delButton(tree):
x=tree.get_children()
for item in x:
tree.delete(item)
delButton(tree)
root.mainloop()

(同样是为了省事……这个就是我在博客园的那个提问的回答)

 

另一种方法:来自很有用但是杂的链接:https://www.cnblogs.com/wumac/p/5816764.html

 

items = your_treeview.get_children()    
[your_treeview.delete(item) for item in items]

 

获取条目值

同样没见到有人问,stackoverflow上才找到的方法

https://stackoverflow.com/questions/34849035/how-to-get-the-value-of-a-selected-treeview-item

import tkinter    
from tkinter
import ttk
# 导入内部包
li = [
'王记',
'12',
'男']
root = tkinter.Tk()
root.title(
'测试')
tree = ttk.Treeview(root,columns=[
'1',
'2',
'3'],show=
'headings')
tree.column(
'1',width=
100,anchor=
'center')
tree.column(
'2',width=
100,anchor=
'center')
tree.column(
'3',width=
100,anchor=
'center')
tree.heading(
'1',text=
'姓名')
tree.heading(
'2',text=
'学号')
tree.heading(
'3',text=
'性别')
tree.insert(
'',
'end',values=li)
tree.grid()
def treeviewClick(event):
#单击
print (
'单击')
for item
in tree.selection():
item_text = tree.item(item,
"values")
print(item_text[
0])
#输出所选行的第一列的值
tree.bind(
'
', treeviewClick)
#绑定单击离开事件===========
root.mainloop()

 

见函数treeview里的内容

 

有用的链接:https://www.cnblogs.com/Tommy-Yu/p/4156014.html

 

各种点击事件

事件一览表
事件 代码 备注
鼠标左键单击按下 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  

 

 

 

 

 

 

 

 

 

 

 

 

 

来自:https://www.cnblogs.com/wumac/p/5842393.html

用法:

tree.bind('
', treeviewClick)#绑定单击离开事件===========

在bind方法里的'<>'添上相应的事件代码就好了,后面的treeview就是我定义的函数

 

标题点击排序

https://blog.csdn.net/mikewolfli/article/details/51393933(强烈怀疑此链接是没注明来源,来自下面的链接的代码)

https://stackoverflow.com/questions/22032152/python-ttk-treeview-sort-numbers(不按默认桶排序的方法)

https://stackoverflow.com/questions/1966929/tk-treeview-column-sort(python3可用的见此链接最下面)

试验可运行代码

import random    
from tkinter
import ttk
from tkinter
import *
root = Tk()
# 初始旷的声明
columns=(
"a",
"b",
"c")
treeview=ttk.Treeview(root,height=
18,show=
"headings",columns=columns )
#表格
treeview.column(
'a', width=
50, anchor=
'center')
treeview.column(
'b', width=
100, anchor=
'center')
treeview.column(
'c', width=
80, anchor=
'center')
treeview.heading(
'a', text=
'列1')
treeview.heading(
'b', text=
'列2')
treeview.heading(
'c', text=
'列3')
treeview.pack(side=LEFT,fill=BOTH)
for i
in range(
10):
treeview.insert(
'',i,values=(str(random.randint(
0,
9)),str(random.randint(
0,
9)),str(random.randint(
0,
9))))
def treeview_sort_column(tv, col, reverse):
#Treeview、列名、排列方式
l = [(tv.set(k, col), k)
for k
in tv.get_children(
'')]
print(tv.get_children(
''))
l.sort(reverse=reverse)
#排序方式
# rearrange items in sorted positions
for index, (val, k)
in enumerate(l):
#根据排序后索引移动
tv.move(k,
'', index)
print(k)
tv.heading(col, command=
lambda: treeview_sort_column(tv, col,
not reverse))
#重写标题,使之成为再点倒序的标题
'''
#莫名其妙????写循环的话只有最后一列管用,看论坛说的好像是python2.7管用
for col in columns:
treeview.heading(col, text=col, command=lambda: treeview_sort_column(treeview, col, False))
'''
'''
#基本用法(上边注释的只有最后一列管用、索性手工试验一下可用性,证实可行)
treeview.heading('a', text='123', command=lambda: treeview_sort_column(tree, 'a', False))#重建标题,添加控件排序方法
treeview.heading('b', text='111', command=lambda: treeview_sort_column(tree, 'b', False))#重建标题,添加控件排序方法
treeview.heading('c', text='223', command=lambda: treeview_sort_column(tree, 'c', False))#重建标题,添加控件排序方法
'''
#这个代码对于python3就管用了
for col
in columns:
#给所有标题加(循环上边的“手工”)
treeview.heading(col, text=col, command=
lambda _col=col: treeview_sort_column(treeview, _col,
False))
root.mainloop()
#进入消息循环

 

 

 

 

    转载地址:https://jiaming.blog.csdn.net/article/details/103700110 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

    上一篇:字体对照表
    下一篇:毕业设计日志(5)

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2024年04月10日 08时21分48秒