在Python tkinter treeview中我试图制作一个显示器,根据所选树视图项的iid显示某些内容,它会在选择事件(鼠标单击)上发生,但我无法正常工作:
def tree_click_event (event):
iid = treedisplay.identify(event.x,event.y)
treedisplay = ttk.Treeview(root,selectmode='browse')
treedisplay.bind('<<TreeviewSelect>>', tree_click_event)
treedisplay.pack(side='top', fill='both', expand=1)
错误:
TypeError: tree_click_event() missing 1 required positional argument: 'y'
这简化为仅创建树,将其打包在tkinter窗口中,寻找熟悉此模块的人,以确切知道我做错了什么
感谢您的示例@BryanOakley,它可以获取项目的文本。有没有办法让下面的代码工作?
import tkinter as tk
from tkinter import ttk
class App:
def __init__(self):
self.root = tk.Tk()
self.tree = ttk.Treeview()
self.tree.pack(side="top", fill="both")
self.tree.bind("<<TreeviewSelect>>", self.tree_click_event)
for i in range(10):
self.tree.insert("", "end", text="Item %s" % i)
self.root.mainloop()
def tree_click_event(self, event):
iid = self.tree.identify(event.x,event.y)
print (iid)
if __name__ == "__main__":
app = App()
答案 0 :(得分:4)
identify需要三个参数,而你只传递两个参数。第一个参数表示要标识的组件,并且必须是以下之一:region,item,column,row或element。
例如:
iid = treedisplay.identify("item", event.x,event.y)
注意:虽然以上语法在语法上是正确的,但它不会完全按照您的想法行事。在<<TreeviewSelect>>
事件的情况下,您不会获得x和y坐标。这是因为键盘和鼠标事件都可以触发事件。 identify
方法应该用于显式绑定鼠标事件,并且主要仅用于低级绑定。
如果您想要所选项目,请使用selection
方法,该方法将返回项目ID列表:
for item in treedisplay.selection():
item_text = self.tree.item(item,"text")