Heim >Backend-Entwicklung >Python-Tutorial >Wie vermeide ich die Neuzuweisung von Tastenbefehlen in Tkinter-For-Schleifen mithilfe von Lambda-Funktionen?
Zuweisen von Schaltflächenbefehlen in einer Tkinter-For-Schleife mit Lambda
Beim Erstellen von Schaltflächen innerhalb einer Tkinter-For-Schleife mit Lambda-Funktionen ist es wichtig, dies zu vermeiden Neuzuweisung derselben Variablen innerhalb der Schleife. Dadurch wird sichergestellt, dass jede Schaltfläche einen eindeutigen Parameter erhält.
Das Problem:
Im bereitgestellten Code:
def a(self, name): print(name) 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
Die Lambda-Funktion innerhalb der Die for-Schleife verweist auf die gleichnamige Variable, die bei jeder Iteration neu zugewiesen wird. Infolgedessen rufen alle Schaltflächen dieselbe Funktion mit dem letzten dem Namen zugewiesenen Wert auf, was zu fehlerhaftem Verhalten führt.
Die Lösung:
Um dieses Problem zu beheben, müssen Sie kann den aktuellen Wert der Namensvariablen mithilfe von Standardparametern an das Schlüsselwortargument des Lambda binden:
user_button = Tkinter.Button(self.root, text=name, command=lambda name=name: self.a(name))
Die Lambda-Funktion jeder Schaltfläche verfügt über standardmäßige Schlüsselwortargumente eine eigene, eindeutige Kopie der Namensvariablen, die sicherstellt, dass beim Klicken auf die Schaltfläche der richtige Parameter verwendet wird.
Das obige ist der detaillierte Inhalt vonWie vermeide ich die Neuzuweisung von Tastenbefehlen in Tkinter-For-Schleifen mithilfe von Lambda-Funktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!