2010-09-25 10 views
9

Ich erstelle eine GUI mit Tkinter, und ein Hauptteil der GUI besteht aus zwei Treeview-Objekten. Ich brauche den Inhalt der Treeview Objekte zu ändern, wenn ein Element (d. H. Ein Verzeichnis) ist geklickt zweimal.Befehl zum Klicken auf die Elemente eines Tkinter Treeview-Widgets?

Wenn Treeview-Elemente Tasten waren, würde ich einfach command auf die entsprechende Funktion einstellen können. Aber ich habe Probleme, eine Möglichkeit zu finden, "on_click" Verhalten für TreeView-Elemente zu erstellen.

Mit welcher Treeview-Option, Methode usw. kann ich einen Befehl an bestimmte Objekte binden und diesen Befehl ausführen "on_click"?

Antwort

16

Wenn Sie möchten, dass der Benutzer doppelt klickt, fügen Sie eine Bindung zu "<Double-1>" hinzu. Da ein einziger Klick die Auswahl festlegt, können Sie in Ihrem Callback das Widget abfragen, um herauszufinden, was ausgewählt ist. Zum Beispiel:

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

die vorherige Lösung ausfällt, wenn mehrere Elemente ausgewählt sind, und der Benutzer verwendet SHIFT+CLICK (zumindest auf einem Mac).

Hier ist eine bessere Lösung:

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