2016-11-09 1 views

Antwort

0

Nein, dort ist nichts eingebaut. Sie müssen kundenspezifische Einbindungen hinzufügen.

Sie könnten z. B. eine Klassenbindung für die Klasse Button hinzufügen. Zum Beispiel:

root.bind_class("Button", "<ButtonPress-1>", log_buttonpress, add="+") 

können Sie dann eine Methode definieren log_buttonpress genannt, die etwa wie folgt aussieht:

def log_buttonpress(self, event): 
    with open("/tmp/log.txt", "a+") as f: 
     f.write("=> " + event.widget.cget("text") + "\n") 

Natürlich wird dies nur Klicks mit der Maus erfassen. Es werden keine Schaltflächen erfasst, die mit der Tastatur angeklickt wurden. Außerdem wird der Befehl für die Schaltfläche nicht aufgerufen, bis Sie die Schaltfläche loslassen, sodass möglicherweise Schaltflächen protokolliert werden, auf die geklickt, aber nicht tatsächlich aktiviert wurde. Diese Probleme sind lösbar, erfordern aber mehr Code. Dies zeigt nur das allgemeine Konzept, keine Cut-and-Paste-Lösung.

Eine andere Möglichkeit, eine eigene Unterklasse von Button zu erstellen und diese spezielle Bindung jeder Instanz hinzuzufügen. Durch die Verwendung von Binde-Tags können Sie jeder Instanz ein spezielles Tag hinzufügen, und dann müssen Sie nur eine einzelne Bindung für dieses Tag haben.

Zum Beispiel:

class MyButton(tk.Button): 
    def __init__(self, *args, **kwargs): 
     tk.Button.__init__(self, *args, **kwargs) 
     bindtags = list(self.bindtags()) 
     bindtags.insert(1, "MyButton") 
     self.bindtags(tuple(bindtags)) 

    @classmethod 
    def log_button(cls, event): 
     with open("/tmp/junk.txt", "a+") as f: 
      f.write("?> " + event.widget.cget("text") + "\n") 

... 
root = tk.Tk() 
root.bind_class("MyButton", "<ButtonRelease-1>", MyButton.log_button) 

b1 = MyButton(...) 
b2 = MyButton(...) 
+0

Danke :) das hat mir so sehr geholfen :) – Supertraff

Verwandte Themen