2011-08-03 13 views
9

Mam 2 przyciski, odpowiednio o nazwie "ButtonA", "ButtonB". Chcę, aby program wydrukował "cześć, przycisk A" i "cześć, przycisk B", jeśli kliknięto dowolny przycisk. Mój kod wygląda następująco:Jak przekazać argumenty do polecenia zwrotnego przycisku Tkinter?

def sayHi(name): 
    print 'hello,', name 

root = Tk() 
btna = Button(root, text = 'ButtonA', command = lambda: text) 
btna.pack() 

Kiedy klikam ButtonA, wystąpi błąd, text not defined.

Rozumiem ten błąd, ale w jaki sposób mogę przekazać tekst ButtonA do lambda?

+1

możliwe duplikat [przechodzącej argumentu w Pythonie polecenia przycisk Tkinter] (http://stackoverflow.com/questions/6920302/passing-argument-in-python-tkinter-button-command). Druga zdarzyła się 5 godzin wcześniej przez innego użytkownika. Niesamowity zbieg okoliczności! –

Odpowiedz

20

To powinno działać:

... 
btnaText='ButtonA' 
btna = Button(root, text = btnaText, command = lambda: sayHi(btnaText)) 
btna.pack() 

Aby uzyskać więcej informacji zajrzyj na Tkinter Callbacks

+0

Fantastyczne rozwiązanie –

+0

Potrzebowałem zadzwonić do mojej funkcji za pomocą 'lambda: self.MyFunction (MyParam)' nie jestem pewien, czy warto edytować? – WhatsThePoint

2

tekst nie jest funkcją w twoim przypadku. Po prostu to:

value = 'ButtonA' 
btna = Button(root, text = value, command = lambda: sayHi(value)) 

I dostaniesz to działa.

+0

Ta odpowiedź nie pokazuje, jak wydrukować "hello, " tak, jak to pytanie. –

+0

Okay, nie przeczytałem tego pytania całkowicie. Przed chwilą zdefiniowałeś wartość tekstową i wysłałeś ją do wywołania zwrotnego lamdba. –

Powiązane problemy