Heim >Backend-Entwicklung >Python-Tutorial >Warum wird der Befehl meiner Tkinter-Schaltfläche sofort und nicht erst beim Klicken ausgeführt?

Warum wird der Befehl meiner Tkinter-Schaltfläche sofort und nicht erst beim Klicken ausgeführt?

Susan Sarandon
Susan SarandonOriginal
2024-12-23 11:01:33403Durchsuche

Why is my Tkinter button's command executing immediately instead of on click?

Unerwartete Schaltflächenauslösung in Tkinter: Funktionsreferenzen verstehen

In Tkinter können Sie beim Erstellen einer Schaltfläche einen Befehl angeben, der ausgeführt wird wenn auf die Schaltfläche geklickt wird. In Ihrem Codebeispiel wird der bereitgestellte Befehl jedoch sofort ausgeführt, wenn die Schaltfläche erstellt wird.

Um zu verstehen, warum dies geschieht, betrachten Sie den folgenden Codeausschnitt:

b = Button(admin, text='as', command=button('hey'))

Dieser Code ist entspricht:

result = button('hey')
b = Button(admin, text='as', command=result)

Wenn Sie button('hey') innerhalb des Befehlsparameters aufrufen, rufen Sie die Funktion auf und führen sie sofort aus. Infolgedessen werden die Codes print('hey') und print('het') gedruckt, bevor tatsächlich auf die Schaltfläche geklickt wird.

Um dieses Problem zu beheben, müssen Sie einen Verweis auf die Funktion übergeben, ohne es ausführen. Lassen Sie dazu einfach die Klammern weg:

b = Button(admin, text='as', command=button)

Dadurch wird ein Verweis auf die Schaltflächenfunktion übergeben und diese wird ausgeführt, wenn auf die Schaltfläche geklickt wird, nicht wenn sie erstellt wird.

Alternativ können Sie Lambda-Funktionen verwenden, um eine anonyme Funktion zu erstellen, die die ursprüngliche Funktion mit dem gewünschten Argument aufruft:

b = Button(admin, text='as', command=lambda: button('hey'))

Das obige ist der detaillierte Inhalt vonWarum wird der Befehl meiner Tkinter-Schaltfläche sofort und nicht erst beim Klicken ausgeführt?. 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