Heim >Backend-Entwicklung >Python-Tutorial >Wie vermeide ich die Neuzuweisung von Tastenbefehlen in Tkinter-For-Schleifen mithilfe von Lambda-Funktionen?

Wie vermeide ich die Neuzuweisung von Tastenbefehlen in Tkinter-For-Schleifen mithilfe von Lambda-Funktionen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-15 05:57:17669Durchsuche

How to Avoid Reassigning Button Commands in Tkinter For Loops Using Lambda Functions?

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!

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