Überwindung der Duplizierung von Schaltflächenparametern in Tkinter-For-Schleifen
In Tkinter kann das Erstellen von Schaltflächen über eine for-Schleife zu unerwartetem Verhalten führen, wenn die Parameterzuweisung ordnungsgemäß erfolgt nicht umgesetzt. Betrachten Sie den folgenden Codeausschnitt:
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
Das beabsichtigte Ergebnis besteht darin, dass jede Schaltfläche ihren eigenen eindeutigen Parameter aus dem Benutzerwörterbuch erhält. Das Drücken einer beliebigen Taste führt jedoch dazu, dass nur der letzte Wert aus dem Wörterbuch (z. B. „Test2“) gedruckt wird.
Dieses Problem tritt auf, weil Lambda-Ausdrücke in der gesamten Schleife dieselbe Namensvariable verwenden. Jede Iteration überschreibt den vorherigen Wert und belässt das Lambda mit dem zuletzt zugewiesenen Namen aus der Schleife.
Lösung: Standard-Schlüsselwortparameter in Lambda
Um dieses Problem zu beheben, können Sie Folgendes tun Verwenden Sie Standardschlüsselwortparameter in Ihrem Lambda-Ausdruck. Hier ist der korrigierte Code:
for name in users: user_button = Tkinter.Button(self.root, text=name, command=lambda name=name: self.a(name))
Durch die explizite Bindung des aktuellen Werts der Variablen „name“ an das Schlüsselwortargument „name“ des Lambda behält das Lambda den richtigen Parameter für jede Schaltfläche bei. Jeder Tastendruck löst nun die gewünschte eindeutige Parameterausgabe aus.
Diese Technik stellt effektiv sicher, dass jede Taste ihre vorgesehene Parameterzuweisung innerhalb der for-Schleife beibehält.
Das obige ist der detaillierte Inhalt vonWie vermeide ich die Duplizierung von Parametern bei der Erstellung von Tkinter-Schaltflächen mithilfe von For-Schleifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!