Python tkinter treeview从所选项

时间:2017-04-27 20:11:37

标签: python tkinter tree treeview

在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()

1 个答案:

答案 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")