代码之家  ›  专栏  ›  技术社区  ›  Rafe Kettler

单击Tkinter TreeView小部件项的命令?

  •  13
  • Rafe Kettler  · 技术社区  · 14 年前

    我用tkinter创建了一个图形用户界面,图形用户界面的主要部分是两个TreeView对象。我需要的内容 Treeview 对象到 改变 当项目(即目录)是 点击两次 .

    如果TreeView项目是按钮,我就可以设置 command 到适当的功能。但我很难找到创造 "on_click" TreeView项的行为。

    什么treeview选项、方法等使我能够将命令绑定到特定项并执行该命令 “On-点击” ?

    3 回复  |  直到 5 年前
        1
  •  25
  •   nbro kai    9 年前

    如果希望在用户双击时发生某种情况,请将绑定添加到 "<Double-1>" . 因为单击设置了选择,所以您可以在回调中查询该小部件以找出所选内容。例如:

    import tkinter as tk
    from tkinter import ttk
    
    class App:
        def __init__(self):
            self.root = tk.Tk()
            self.tree = ttk.Treeview()
            self.tree.pack()
            for i in range(10):
                self.tree.insert("", "end", text="Item %s" % i)
            self.tree.bind("<Double-1>", self.OnDoubleClick)
            self.root.mainloop()
    
        def OnDoubleClick(self, event):
            item = self.tree.selection()[0]
            print("you clicked on", self.tree.item(item,"text"))
    
    if __name__ == "__main__":
        app = App()
    
        2
  •  13
  •   nbro kai    9 年前

    当选择多个元素并且用户使用 SHIFT+CLICK (至少在Mac电脑上)。

    下面是一个更好的解决方案:

    import tkinter as tk
    import tkinter.ttk as ttk
    
    class App:
        def __init__(self):
            self.root = tk.Tk()
            self.tree = ttk.Treeview()
            self.tree.pack()
            for i in range(10):
                self.tree.insert("", "end", text="Item %s" % i)
            self.tree.bind("<Double-1>", self.OnDoubleClick)
            self.root.mainloop()
    
        def OnDoubleClick(self, event):
            item = self.tree.identify('item',event.x,event.y)
            print("you clicked on", self.tree.item(item,"text"))
    
    if __name__ == "__main__":
        app = App()
    
        3
  •  0
  •   Matthew Martinez    5 年前

    我知道这是旧的,但此代码还将在树视图中打印多个选定项。

    def on_double_click(self, event):
        item = self.tree.selection()
        for i in item:
            print("you clicked on", self.tree.item(i, "values")[0])