In Tkinter kann das Erstellen mehrerer Schaltflächen innerhalb einer Schleife nützlich sein, um dynamische Benutzeroberflächen zu generieren. Die Übergabe von Befehlsargumenten an Schaltflächen kann jedoch eine Herausforderung darstellen, insbesondere wenn versucht wird, zu unterscheiden, welche Schaltfläche gedrückt wurde.
Betrachten Sie den folgenden Code, in dem Schaltflächen erstellt werden, deren Titel durch den Schleifenzähler erhöht werden:
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)
Das Problem tritt auf, wenn wir versuchen, die Kennung der Schaltfläche (myNum) auszudrucken, wenn wir auf eine davon klicken. Die Ausgabe zeigt durchweg 2 an, den Wert der letzten Iteration. Dieses Verhalten weist darauf hin, dass die Schaltflächen trotz ihrer eindeutigen Titel im Wesentlichen nicht unterscheidbar sind.
Um dieses Problem zu lösen, müssen wir sicherstellen, dass jede Schaltfläche ihren eigenen eindeutigen Wert von i erfasst Zeit der Schöpfung. Um dies zu erreichen, können wir eine clevere Technik mit Lambda-Funktionen anwenden:
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)
Durch Hinzufügen der Zuweisung i=i innerhalb der Lambda-Funktion „frieren“ wir effektiv den aktuellen Wert von i zum Zeitpunkt des Lambda ein definiert ist. Dadurch wird sichergestellt, dass jede Schaltfläche ihre eindeutige Kennung auch nach Abschluss der Schleife behält.
Diese Technik ermöglicht es uns, mehrere Tkinter-Schaltflächen dynamisch innerhalb einer Schleife zu erstellen, wobei jede Schaltfläche eindeutig identifiziert werden kann, wenn geklickt. Durch das Verständnis des Verhaltens von Lambda-Funktionen und -Abschlüssen können wir mehr Kontrolle und Flexibilität in unseren Tkinter-Anwendungen erreichen.
Das obige ist der detaillierte Inhalt vonWie kann ich eindeutige Argumente an mehrere in einer Schleife erstellte Tkinter-Schaltflächen übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!