In tkinter soll der Parameter „Befehl“ des Schaltflächen-Widgets einen Rückruf ausführen, wenn die Schaltfläche aktiviert ist gedrückt. Es ist jedoch rätselhaft, warum die Callback-Funktion sofort bei der Deklaration ausgeführt wird und nicht erst, wenn auf die Schaltfläche geklickt wird.
Der Schlüssel liegt in der Auswertung von Parametern während der Instanzerstellung. Wenn Sie eine Funktion als „Befehl“-Parameter übergeben, wertet Python zunächst die Funktion aus und ruft sie mit allen in Klammern übergebenen Argumenten auf. Zum Beispiel im folgenden Code:
<code class="python">def Hello(): print("Hi there!") hi = Button(frame, text="Hello", command=Hello())</code>
Der Code ruft die Hello-Funktion auf, gibt aufgrund des Fehlens einer Return-Anweisung einen None-Wert zurück und übergibt diesen None-Wert als „Befehl“-Parameter an die Taste. Folglich wird der Rückruf nicht ausgeführt, wenn auf die Schaltfläche geklickt wird, und die erste Auswertung gibt „Hallo!“ aus.
Um dieses Problem zu beheben und sicherzustellen, dass der Rückruf nur ausgeführt wird, wenn auf die Schaltfläche geklickt wird, übergeben Sie die Funktion selbst, ohne Klammern:
<code class="python">hi = Button(frame, text="Hello", command=Hello)</code>
Diese Änderung behält die Hello-Funktion als aufrufbares Objekt bei, das beim Klicken auf die Schaltfläche aufgerufen wird.
Verstehen der grundlegenden Unterschiede zwischen Funktionsobjekten und ihren Rückgabewerten ist in diesem Zusammenhang von entscheidender Bedeutung. Das Funktionsobjekt wird durch Funktionsname referenziert, während Funktionsname() den Rückgabewert darstellt. Während Ersteres aufrufbar ist, ist Letzteres das Ergebnis des Aufrufs der Funktion.
Im Wesentlichen ist es beim Definieren des „Befehls“-Parameters einer Schaltfläche unbedingt erforderlich, das Funktionsobjekt und nicht seinen Rückgabewert zu übergeben, um vorzeitige Ergebnisse zu vermeiden Ausführung. Diese Unterscheidung ebnet den Weg für eine nahtlose Rückruffunktion beim Klicken auf die Schaltfläche.
Das obige ist der detaillierte Inhalt vonWarum wird der Parameter „Befehl' in Tkinter-Schaltflächen bei der Deklaration ausgeführt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!