Warum wird der Schaltflächenparameter „Befehl“ ausgeführt, wenn er deklariert wird?
In Python ist der Parameter „Befehl“ des Schaltflächen-Widgets verantwortlich Definieren einer Callback-Funktion. Benutzer können jedoch verwirrt sein, wenn diese Rückruffunktion scheinbar sofort nach der Deklaration der Schaltfläche ausgeführt wird.
Dieses Problem tritt auf, wenn dem Parameter „Befehl“ ein Funktionsaufrufausdruck anstelle eines Funktionsobjekts zugewiesen wird. Zum Beispiel:
def Hello():
print("Hi there!")
Button(frame, text="Hello", command=Hello()) # Function call expression
In diesem Code ruft der Ausdruck „Hello()“ sofort die Hello-Funktion auf und gibt ihren Rückgabewert zurück. Infolgedessen wird die Rückruffunktion ausgeführt, bevor der Button erstellt wird, was zu der Meldung „Hallo!“ führt. Nachricht wird an die Konsole ausgegeben.
Um dieses Problem zu vermeiden und das Funktionsobjekt dem Parameter „command“ zuzuweisen, verwenden Sie den Funktionsnamen ohne Klammern:
Button(frame, text="Hello", command=Hello) # Function object
Funktionsobjekte enthalten Verweise auf ihren Code, der ausgeführt wird, wenn der Rückruf aufgerufen wird. Wenn zusätzlich Argumente übergeben werden müssen, können Lambda-Ausdrücke verwendet werden:
Button(frame, text="Hello", command=lambda: Goodnight("Moon"))
In diesem Fall umschließt der Lambda-Ausdruck den Goodnight("Moon")-Aufruf und verzögert seine Ausführung, bis auf die Schaltfläche geklickt wird.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3