Tkinter Treeview 双击某个项目
在使用Treeview控件时,常常需要执行双击操作,最常见的是打开文档。本节将讲解这方面的知识。在Treeview控件中当发生双击时,会产生<Double-1>
事件,我们可以利用这个功能建立一个双击的事件处理程序。
对于这类问题,另一个重点是取得双击的项目,下面将以实例讲解。
示例1
当双击Treeview控件中的某个项目时,会出现对话框,列出所选的项目。
from tkinter import *
from tkinter import messagebox
from tkinter.ttk import *
def doubleClick(event):
e = event.widget # 取得事件控件
iid = e.identify("item",event.x,event.y) # 取得双击项目id
state = e.item(iid,"text") # 取得state
city = e.item(iid,"values")[0] # 取得city
outputStr = "{0} : {1}".format(state,city) # 格式化
messagebox.showinfo("Double Clicked",outputStr) # 输出
root = Tk()
root.title("ch18_12")
stateCity = {"Illinois": "Chicago", "California": "Los Angeles",
"Texas": "Houston", "Washington": "Seattle",
"Jiangsu": "Nanjing", "Shandong": "Qingdao",
"Guangdong": "Guangzhou", "Fujian": "Xiamen"}
# 建立Treeview
tree = Treeview(root,columns=("cities"))
# 建立栏标题
tree.heading("#0",text="State") # 图标栏
tree.heading("cities",text="City")
# 格式栏位
tree.column("cities",anchor=CENTER)
# 建立内容
for state in stateCity.keys():
tree.insert("",index=END,text=state,values=stateCity[state])
tree.bind("<Double-1>",doubleClick) # 双击绑定doubleClick方法
tree.pack()
root.mainloop()
输出:
上述程序第31行,将双击操作与doubleClick( )方法绑定,所以当双击时会执行第5~11行的doubleClick( )方法。第6行是取得双击事件的控件,第7行identify( )方法的用法如下。
iid = e.identify("item",event.x,event.y)
第一个参数xxx可以是item、column、row,分别是使用双击时的坐标,取得双击时的item、column或row的信息,此例是使用item,所以我们可以由此获得是哪一个项目被双击。第8行是获得双击的“text”信息,此信息是State内容。第9行是获得双击的“values”信息,此信息是City内容。第9行是获得格式化的字符串,第10行是出现showinfo的消息对话框。