Referenz in 'lambda' vermeiden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Redprince
User
Beiträge: 128
Registriert: Freitag 22. Oktober 2004, 09:22
Wohnort: Salzgitter
Kontaktdaten:

Referenz in 'lambda' vermeiden

Beitragvon Redprince » Montag 13. August 2007, 10:52

Guten Morgen!
Mein Ziel ist es, via Tkinter eine variable Anzahl an Buttons zu erstellen, wobei der Text auf dem Button noch Argument einer für command erstellten Funktion sein soll. Die Anzahl und Captions ergeben sich aus einer Liste:

Code: Alles auswählen

buttons = ["YES", "NO"]
for i, name in enumerate(buttons):
    tk.Button(text=name, command=lambda: callback(name)).grid(row=1, column=i)

Die Text auf den Buttons ist entsprechend, allerdings wird callback immer mit dem letzten Namen in der Liste als Argument aufgerufen. Ich versuche nun schon seit einiger Zeit vergebens, diese Referenz zu vermeiden:
  • copy.copy() von lambda, buttons, name
  • Referenz der tk.Button() in einer Liste zu sichern
  • Als Argument nicht name verwenden, sondern mit einem Indix auf die Liste zuzugreifen
Wie kann ich die (in diesem Fall) ungewollte Referenz verhindern? Danke im Voraus!
I am not part of the allesburner. I am the allesburner.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Montag 13. August 2007, 11:17

Ungetestet:

Code: Alles auswählen

tk.Button(text=name, command=lambda arg=name: callback(arg)).grid(row=1, column=i)
MfG
HWK
Redprince
User
Beiträge: 128
Registriert: Freitag 22. Oktober 2004, 09:22
Wohnort: Salzgitter
Kontaktdaten:

Beitragvon Redprince » Montag 13. August 2007, 11:23

Funktioniert, herzlichen Dank!
I am not part of the allesburner. I am the allesburner.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder