Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Schleifenvariablen korrekt an Tkinter-Schaltflächenbefehle übergeben?
In Tkinter kann das Erstellen von Schaltflächen in einer Schleife unkompliziert sein. Allerdings kann es schwierig werden, bestimmte Argumente an den Befehl jeder Schaltfläche zu übergeben.
Stellen Sie sich das folgende Szenario vor, in dem Sie versuchen, drei Schaltflächen mit den Titeln „Spiel 1“ bis „Spiel 3“ zu erstellen. Sie beabsichtigen, den entsprechenden numerischen Wert an das Befehlsargument zu übergeben, damit Sie beim Drücken einer Schaltfläche erkennen können, welche Schaltfläche die Aktion ausgelöst hat.
def createGameURLs(self): self.button = [] for i in range(3): self.button.append(Button(self, text='Game '+str(i+1), command=lambda: self.open_this(i))) self.button[i].grid(column=4, row=i+1, sticky=W) def open_this(self, myNum): print(myNum)
Leider funktioniert dieser Code nicht wie vorgesehen. Wenn eine beliebige Taste gedrückt wird, ist der gedruckte Wert immer 2, die letzte Iteration der Schleife. Das Problem entsteht, weil die Lambda-Funktion den Wert von i am Ende der Schleife verwendet, nicht seinen Wert bei der Erstellung jeder Schaltfläche.
Um dieses Problem zu lösen, müssen Sie Sie müssen einen Abschluss um den Befehl jeder Schaltfläche erstellen. Dies kann durch die Verwendung der Syntax Lambda i=i: self.open_this(i) erreicht werden.
def createGameURLs(self): self.button = [] for i in range(3): self.button.append(Button(self, text='Game '+str(i+1), command=lambda i=i: self.open_this(i))) self.button[i].grid(column=4, row=i+1, sticky=W)
Mit dieser Modifikation erfasst der Befehl jeder Schaltfläche den spezifischen Wert von i zum Zeitpunkt seiner Erstellung. Wenn eine Taste gedrückt wird, stellt der Abschluss sicher, dass der korrekte Wert von i an die open_this-Funktion übergeben wird.
Das obige ist der detaillierte Inhalt vonWie kann ich Schleifenvariablen korrekt an Tkinter-Schaltflächenbefehle übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!