Search code examples
pythonuser-interfacetreeviewtkinter

Command for clicking on the items of a Tkinter Treeview widget?


I'm creating a GUI with Tkinter, and a major part of the GUI is two Treeview objects. I need the contents of the Treeview objects to change when an item (i.e. a directory) is clicked twice.

If Treeview items were buttons, I'd just be able to set command to the appropriate function. But I'm having trouble finding a way to create "on_click" behavior for Treeview items.

What Treeview option, method, etc, enables me to bind a command to particular items and execute that command "on_click"?


Solution

  • If you want something to happen when the user double-clicks, add a binding to "<Double-1>". Since a single click sets the selection, in your callback you can query the widget to find out what is selected. For example:

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