100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > python ttk Treeview的插入 清空 各种点击事件 获取条目值 标题单击排序

python ttk Treeview的插入 清空 各种点击事件 获取条目值 标题单击排序

时间:2021-06-16 14:49:29

相关推荐

python ttk Treeview的插入 清空 各种点击事件 获取条目值 标题单击排序

昨天整了一天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()

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

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

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

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

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

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

清空方法:

参考stackoverflow的提问/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()

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

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

items = your_treeview.get_children()

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

获取条目值

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

/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("<ButtonRelease-1>", treeviewClick)#绑定单击离开事件===========

root.mainloop()

见函数treeview里的内容

有用的链接:/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

来自:/wumac/p/5842393.html

用法:

tree.bind("<ButtonRelease-1>", treeviewClick)#绑定单击离开事件===========

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

标题点击排序

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

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

/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()#进入消息循环

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。