Heim >Backend-Entwicklung >Python-Tutorial >Wie vermeide ich Lambda-Schließungsprobleme beim Zuweisen von Schaltflächenbefehlen in einer Tkinter-For-Schleife?

Wie vermeide ich Lambda-Schließungsprobleme beim Zuweisen von Schaltflächenbefehlen in einer Tkinter-For-Schleife?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-18 07:44:17175Durchsuche

How to Avoid Lambda Closure Issues When Assigning Button Commands in a Tkinter For Loop?

Tkinter weist Schaltflächenbefehle in einer For-Schleife mit Lambda zu

In Tkinter kann es vorkommen, dass Sie mehrere Schaltflächen dynamisch mithilfe einer for-Schleife erstellen müssen Jeder Schaltfläche sollte ein eindeutiger Befehl zugeordnet sein. Wenn Sie jedoch die Schleifenvariable direkt im Lambda-Ausdruck für den Befehl verwenden, kann ein potenzielles Problem auftreten.

Bedenken Sie den folgenden Code:

users = {"Test": "127.0.0.0", "Test2": "128.0.0.0"}
row = 1
for name in users:
    user_button = Tkinter.Button(self.root, text=name,
                                 command=lambda: self.a(name))
    user_button.grid(row=row, column=0)
    row += 1

Hier ist die Absicht Erstellen Sie Schaltflächen mit eindeutigen Parameterwerten für jeden Benutzer. Bei der Ausführung rufen jedoch alle Schaltflächen die a()-Methode mit dem zuletzt zugewiesenen Wert von name auf, was dazu führt, dass jede Schaltfläche „Test2“ ausgibt.

Um dieses Problem zu beheben, können Sie Standardschlüsselwortparameter in nutzen Lambda-Ausdruck. Indem Sie den aktuellen Wert von name einem neuen Parameter zuweisen, erstellen Sie eine eindeutige Funktion für jede Iteration:

user_button = Tkinter.Button(self.root, text=name,
                             command=lambda name=name: self.a(name))

Dadurch wird sichergestellt, dass jede Schaltfläche über eine eigene Instanz der Lambda-Funktion mit dem entsprechenden Namensparameter verfügt. Dadurch rufen die Schaltflächen die a()-Methode korrekt mit den vorgesehenen Parametern auf.

Das obige ist der detaillierte Inhalt vonWie vermeide ich Lambda-Schließungsprobleme beim Zuweisen von Schaltflächenbefehlen in einer Tkinter-For-Schleife?. 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