Heim >Backend-Entwicklung >Python-Tutorial >Wie vermeide ich Probleme mit dem Variablenbereich beim Zuweisen von Tkinter-Schaltflächenbefehlen in einer Schleife?

Wie vermeide ich Probleme mit dem Variablenbereich beim Zuweisen von Tkinter-Schaltflächenbefehlen in einer Schleife?

Susan Sarandon
Susan SarandonOriginal
2024-12-18 20:34:18341Durchsuche

How to Avoid Variable Scope Issues When Assigning Tkinter Button Commands in a Loop?

Tkinter-Schaltflächenbefehlszuweisung in einer For-Schleife mit Lambda

In Tkinter besteht eine häufige Aufgabe darin, eine Reihe von Schaltflächen mithilfe eines for zu erstellen Schleife. Bei der Zuweisung von Befehlen zu diesen Schaltflächen mit einer Lambda-Funktion entsteht jedoch eine Gefahr.

Das Problem tritt auf, wenn innerhalb der Lambda-Funktion ein Variablenname verwendet wird, der auch im for-Schleifen-Iterator verwendet wird. Diese Variable wird im Verlauf der Schleife ständig neu zugewiesen, was dazu führt, dass alle Schaltflächen denselben Wert für die zugewiesene Variable verwenden.

Um dieses Problem zu beheben, ändern Sie den Lambda-Ausdruck, indem Sie ein Standard-Schlüsselwortargument einführen. Dadurch wird der aktuelle Wert der Variablen jedes Mal durch die Schleife an das Schlüsselwortargument des Lambda gebunden:

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

Durch Zuweisen des Variablennamens zum Schlüsselwortargument „Name“ wird der aktuelle Wert bei jeder Iteration an das Argument gebunden. Dadurch wird sichergestellt, dass jede Schaltfläche beim Klicken ihren eindeutigen Parameter behält.

Das obige ist der detaillierte Inhalt vonWie vermeide ich Probleme mit dem Variablenbereich beim Zuweisen von Tkinter-Schaltflächenbefehlen in einer 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