Heim >Backend-Entwicklung >Python-Tutorial >Wie übergebe ich eindeutige Argumente an Befehle in Tkinter-Schaltflächenschleifen?

Wie übergebe ich eindeutige Argumente an Befehle in Tkinter-Schaltflächenschleifen?

Susan Sarandon
Susan SarandonOriginal
2024-12-31 22:33:15937Durchsuche

How to Pass Unique Arguments to Commands in Tkinter Button Loops?

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!

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