Heim >Backend-Entwicklung >Python-Tutorial >Warum wird die Schaltfläche „Befehl' sofort ausgeführt, wenn sie deklariert wird?

Warum wird die Schaltfläche „Befehl' sofort ausgeführt, wenn sie deklariert wird?

Barbara Streisand
Barbara StreisandOriginal
2024-10-19 07:59:01527Durchsuche

Why Does the Button

Warum wird der Button-Parameter „command“ ausgeführt, wenn er deklariert wird?

In Python ist der „command“-Parameter des Button-Widgets dafür 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. Beispiel:

<code class="python">def Hello():
    print("Hi there!")

Button(frame, text="Hello", command=Hello())  # Function call expression</code>

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 gedruckt.

Um dieses Problem zu vermeiden und das Funktionsobjekt dem Parameter „Befehl“ zuzuweisen, verwenden Sie den Funktionsnamen ohne Klammern:

<code class="python">Button(frame, text="Hello", command=Hello)  # Function object</code>

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:

<code class="python">Button(frame, text="Hello", command=lambda: Goodnight("Moon"))</code>

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.

Das obige ist der detaillierte Inhalt vonWarum wird die Schaltfläche „Befehl' sofort ausgeführt, wenn sie deklariert wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn