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

Barbara Streisand
Freigeben: 2024-10-19 07:59:01
Original
492 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage