Heim > Artikel > Backend-Entwicklung > Warum wird der Schaltflächenparameter „Befehl“ ausgeführt, wenn er in tkinter deklariert wird?
Button-Parameter „Command“-Ausführung erklärt
In Pythons tkinter stellt sich häufig die Frage: Warum ist der „command“-Parameter eines Buttons hingerichtet, wenn erklärt? Dieses Verhalten kann für Anfänger verwirrend sein.
Um dies zu verstehen, untersuchen wir den Python-Codeausschnitt, der das Problem verursacht:
def Hello(): print("Hi there!") hi = Button(frame, text="Hello", command=Hello())
Wie geschrieben ist der Parameter „command“ auf das Ergebnis gesetzt des Aufrufs der Hello-Funktion. In Python gibt der Aufruf einer Funktion mit Klammern, z. B. Hello(), jedoch den Wert zurück, den die Funktion erzeugt. Im Fall von Hello wird None zurückgegeben, da keine Return-Anweisung vorhanden ist.
Daher interpretiert es beim Erstellen des Button-Objekts „command=Hello()“ als „command=None“. Infolgedessen wird die Hello-Funktion sofort ausgeführt und „Hallo!“ ausgegeben. an die Konsole.
Um dieses Problem zu vermeiden und die Hello-Funktion nur dann auszuführen, wenn die Taste gedrückt wird, sollten Sie das Funktionsobjekt selbst als Befehl ohne Klammern übergeben:
hi = Button(frame, text="Hello", command=Hello)
Dies stellt sicher, dass die Hello-Funktion aufgerufen wird, wenn auf die Schaltfläche geklickt wird, und nicht zum Zeitpunkt der Deklaration.
Wenn Sie Argumente an die Funktion übergeben müssen, verwenden Sie einen Lambda-Ausdruck, um eine parameterlose aufrufbare Funktion zu erstellen. Dadurch können Sie die sofortige Auswertung der Funktion vermeiden und sie an den Befehlsparameter übergeben:
Goodnight = lambda: print("Goodnight, Moon") hi = Button(frame, text="Hello", command=Goodnight)
Das obige ist der detaillierte Inhalt vonWarum wird der Schaltflächenparameter „Befehl“ ausgeführt, wenn er in tkinter deklariert wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!