Seite 1 von 1

Referenz in 'lambda' vermeiden

Verfasst: Montag 13. August 2007, 10:52
von Redprince
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!

Verfasst: Montag 13. August 2007, 11:17
von HWK
Ungetestet:

Code: Alles auswählen

tk.Button(text=name, command=lambda arg=name: callback(arg)).grid(row=1, column=i)
MfG
HWK

Verfasst: Montag 13. August 2007, 11:23
von Redprince
Funktioniert, herzlichen Dank!