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
Freigeben: 2024-12-24 17:56:10
Original
168 Leute haben es durchsucht

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage