Heim >Backend-Entwicklung >Python-Tutorial >Wann wird die Parameterfunktion „Befehl' der Schaltfläche ausgeführt?
In Python tkinter ist der „command“-Parameter für das Button-Widget dazu gedacht, eine Funktion anzugeben ausgeführt werden, wenn die Taste gedrückt wird. Ein unter Anfängern häufiges Missverständnis ist jedoch die Beobachtung, dass die mit „Befehl“ verknüpfte Funktion bereits zum Zeitpunkt der Schaltflächendeklaration ausgeführt wird.
Um dieses Verhalten zu verstehen, müssen wir uns damit befassen, wie Python mit Funktionsparametern umgeht. Wenn Sie eine Funktion als Parameter übergeben, gibt es zwei Möglichkeiten:
In dem von Ihnen bereitgestellten Beispielcode wird Hello() als Parameter an übergeben das Button-Widget, was bedeutet, dass die Funktion sofort ausgeführt wird und ihr Rückgabewert an „command“ übergeben wird. Da Hello() nichts zurückgibt, gibt es None zurück, das dann dem „Befehl“-Parameter der Schaltfläche zugewiesen wird und praktisch nichts bewirkt.
Um dieses Problem zu beheben und die Funktion nur auszuführen, wenn auf die Schaltfläche geklickt wird, Sie sollten das Funktionsobjekt wie folgt übergeben:
<code class="python">hi = Button(frame, text="Hello", command=Hello)</code>
Auf diese Weise wird beim Drücken der Schaltfläche die Funktion Hello() aufgerufen und führt den beabsichtigten Code aus.
Zusätzlich , wenn Sie Argumente an die Funktion übergeben müssen, können Sie einen Lambda-Ausdruck verwenden, um den Funktionsaufruf zu umschließen, wie unten gezeigt:
<code class="python">hi = Button(frame, text="Hello", command=lambda: Goodnight("Moon"))</code>
In diesem Fall stellt der Lambda-Ausdruck sicher, dass die Goodnight()-Funktion wird nicht zum Zeitpunkt der Schaltflächendeklaration ausgeführt, sondern wartet, bis auf die Schaltfläche geklickt und der Befehl ausgeführt wird.
Das obige ist der detaillierte Inhalt vonWann wird die Parameterfunktion „Befehl' der Schaltfläche ausgeführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!