【问题标题】:Command for clicking on the items of a Tkinter Treeview widget?单击 Tkinter Treeview 小部件的项目的命令?
【发布时间】:2011-04-17 04:39:35
【问题描述】:

我正在用 Tkinter 创建一个 GUI,GUI 的主要部分是两个 Treeview 对象。当一个项目(即一个目录)被点击两次时,我需要 Treeview 对象的内容来更改。

如果 Treeview 项目是按钮,我只需将 command 设置为适当的功能。但是我很难找到一种方法来为 Treeview 项目创建 "on_click" 行为。

什么 Treeview 选项、方法等使我能够将命令绑定到特定项目并执行该命令"on_click"?

【问题讨论】:

    标签: python user-interface treeview tkinter


    【解决方案1】:

    如果您希望用户双击时发生某些事情,请将绑定添加到"<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】:

      The previous solution fails when multiple elements are selected and the user uses SHIFT+CLICK (at least on a 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】:

        我知道这是旧的,但这段代码也会在树视图中打印多个选定的项目。

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

        【讨论】:

          猜你喜欢
          • 2020-05-20
          • 2017-03-24
          • 2016-12-04
          • 2020-09-24
          • 1970-01-01
          • 2013-05-20
          • 1970-01-01
          • 2016-07-07
          • 1970-01-01
          相关资源
          最近更新 更多