Heim >Backend-Entwicklung >Python-Tutorial >Wie übergebe ich eindeutige Argumente an Befehle in Tkinter-Schaltflächenschleifen?
Programmgesteuertes Erstellen von Schaltflächen in tkinter mit eindeutigen Befehlsargumenten
Die vorliegende Aufgabe besteht darin, mithilfe einer for-Schleife mehrere Schaltflächen innerhalb einer tkinter-Schnittstelle zu generieren . Jede Schaltfläche sollte ein eindeutiges Befehlsargument enthalten, das die aktuelle Iterationsanzahl darstellt. Der vorhandene Code liefert jedoch Schaltflächen mit konsistenten gedruckten Werten, was auf ein potenzielles Problem mit der Befehlsargumentzuweisung hinweist.
Das Problem: Verschwindende Iterationswerte
Der bereitgestellte Code erstellt Schaltflächen mit Titeln von „Spiel 1“ bis „Spiel 3“. Wenn Sie auf eine dieser Schaltflächen klicken, ist der gedruckte Wert immer 2, entsprechend der letzten Iterationsanzahl. Dies deutet darauf hin, dass die Befehlsargumente als eine einzelne Einheit behandelt werden und nicht mit jeder einzelnen Schaltfläche verknüpft sind.
Die Lösung: Iterationswerte beibehalten
Der Schlüssel zu Die Lösung dieses Problems besteht darin, den aktuellen Iterationswert (i) bei der Definition des Befehls für jede Schaltfläche beizubehalten. Um dies zu erreichen, ist ein modifizierter Lambda-Ausdruck erforderlich:
command=lambda i=i: self.open_this(i)
Dieser Lambda-Ausdruck weist den aktuellen Wert von i einer Variablen namens i zu. Dadurch wird sichergestellt, dass der i-Wert erfasst und zum Zeitpunkt der Erstellung an die jeweilige Schaltfläche angehängt wird. Dadurch hat jede Schaltfläche Zugriff auf ihre eindeutige Iterationsanzahl.
Lambda-Verschlüsse verstehen
Durch die Verwendung von i=i speichert der Verschluss den aktuellen Wert von i zum Zeitpunkt der Lambda-Definition, anstatt sich auf den Wert von i zum Zeitpunkt des Funktionsaufrufs zu verlassen. Dadurch bleiben die notwendigen Informationen für jede Schaltfläche erhalten.
Fester Code
Mit der oben genannten Änderung sieht der korrigierte Code wie folgt aus:
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) def open_this(self, myNum): print(myNum)
Wenn Sie nun auf eine der Schaltflächen klicken, wird die entsprechende Iterationsanzahl genau gedruckt, wodurch das ursprüngliche Problem behoben wird.
Das obige ist der detaillierte Inhalt vonWie übergebe ich eindeutige Argumente an Befehle in Tkinter-Schaltflächenschleifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!