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?
2
A
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.