Heim > Backend-Entwicklung > Python-Tutorial > Wie kann ich eindeutige Argumente an mehrere in einer Schleife erstellte Tkinter-Schaltflächen übergeben?

Wie kann ich eindeutige Argumente an mehrere in einer Schleife erstellte Tkinter-Schaltflächen übergeben?

Mary-Kate Olsen
Freigeben: 2024-12-26 22:06:18
Original
682 Leute haben es durchsucht

How Can I Pass Unique Arguments to Multiple Tkinter Buttons Created in a Loop?

Erstellung von Schaltflächen in Tkinter mit Befehlsargumenten verstehen

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

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.

Lösung des Problems

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

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.

Fazit

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!

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