Heim >Backend-Entwicklung >Python-Tutorial >Wie vermeide ich Lambda-Schließungsprobleme beim Zuweisen von Schaltflächenbefehlen in einer Tkinter-For-Schleife?
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!