Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich Schleifenvariablen korrekt an Tkinter-Schaltflächenbefehle übergeben?

Wie kann ich Schleifenvariablen korrekt an Tkinter-Schaltflächenbefehle übergeben?

Linda Hamilton
Linda HamiltonOriginal
2024-12-24 17:56:10174Durchsuche

How Can I Pass Loop Variables Correctly to Tkinter Button Commands?

Schleifenvariablen 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.

Das Schließungswunder

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!

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