Schaltflächenbefehlsausführung bei der Erstellung
Im bereitgestellten Code wird ein Schaltflächen-Widget erstellt, dessen Befehlsoption auf das Ergebnis des Aufrufs von a festgelegt ist Funktion mit einem Argument, was zu einer sofortigen Ausführung des Befehls führt. Um dieses Problem anzugehen, ist es wichtig zu verstehen, wie die Ereignisbehandlung in Tkinter funktioniert.
In Tkinter funktioniert die Ereignisbehandlung durch die Verknüpfung einer Funktion mit einem Ereignis (z. B. Klicken auf eine Schaltfläche). Wenn das Ereignis eintritt, ruft Tkinter die zugehörige Funktion auf. Im bereitgestellten Code enthält die Befehlsoption jedoch das Ergebnis des Aufrufs der Funktionsschaltfläche („hey“) und nicht einen Verweis auf die Funktion selbst.
Daher macht der Code im Wesentlichen dasselbe wie:
result = button('hey') b = Button(admin, text='as', command=result)
Folglich wird der Befehl sofort ausgeführt, wenn die Schaltfläche erstellt wird, und „hey“ und „het“ ausgegeben. Wenn auf die Schaltfläche geklickt wird, passiert nichts, da der Befehl bereits ausgeführt wurde ausgeführt wurde.
Um dies zu beheben, sollte die Befehlsoption einen Verweis auf die Funktion enthalten, nicht das Ergebnis ihres Aufrufs. Zum Beispiel:
b = Button(admin, text='as', command=button)
Alternativ kann man, wenn der Befehl ein Argument erfordert, Lambda-Funktionen verwenden, die Inline-Funktionsdefinitionen ermöglichen. Zum Beispiel:
b = Button(admin, text='as', command=lambda: button('hey'))
Dadurch wird eine anonyme Funktion erstellt, die beim Aufruf die Schaltfläche („hey“) aufruft und die gewünschte Funktionalität bereitstellt.
Das obige ist der detaillierte Inhalt vonWarum führt mein Tkinter-Button seinen Befehl sofort nach der Erstellung aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!