2016-07-04 2 views
2

Ich habe eine GUI in Python 3 und tkinter, die eine große ttk.Treeview hat. Ich habe Methoden zur Zeilenauswahl definiert (ein Klick) und öffne ein erweitertes Info-Panel (Doppelklick). Ich muss sicherstellen, dass der Treeview-Status nach einem Doppelklick für die nächsten ein oder zwei Sekunden nicht durch einen weiteren Klick geändert wird. Ist es möglich, Treeview-Mausbindungen zu deaktivieren, etwa was wir mit Buttons machen?In Python3/tkinter gibt es eine Möglichkeit, die Klicks in einem Treeview-Widget vorübergehend nicht mehr zu akzeptieren?

Antwort

0

Mit ein wenig mehr Forschung konnte ich mir eine Lösung einfallen lassen. Ich habe gerade eine leere Methode erstellt, die aufgerufen wird, wenn das Baum-Widget inaktiv sein soll. So können wir so etwas zu „unbind“ alle Mausereignisse verwenden und neu binden sie ein paar Sekunden später, je nach Bedarf:

def nothing(self, *event): 
    """ # Hacking moment: A function that does nothing, for those times you need it... 
    """ 
    pass 


def bind_tree(self): 
    """ # Bind mouse and keyboard events to their respective functions or methods... 
    """ 
    self.tree.bind('<<TreeviewSelect>>', self.selectItem_popup) 
    self.tree.bind('<Double-1>', self.show_details) 
    self.tree.bind("<Button-2>", self.popupMenu) 
    self.tree.bind("<Button-3>", self.popupMenu) 

def unbind_tree(self): 
    """ # Unbind all mouse and keyboard events, by binding them to an empty method... 
    """ 
    self.tree.bind('<<TreeviewSelect>>', self.nothing) 
    self.tree.bind('<Double-1>', self.nothing) 
    self.tree.bind("<Button-2>", self.nothing) 
    self.tree.bind("<Button-3>", self.nothing) 

Dann wird in dem Rest des Codes, Wir müssen nur anrufen bind_tree() und unbind_tree() nach Bedarf.

Verwandte Themen