2011-08-03 18 views
9

Tengo 2 botones, respectivamente llamados 'ButtonA', 'ButtonB'. Quiero que el programa imprima 'hola, botón A' y 'hola, botón B' si se hace clic en cualquier botón. Mi código es el siguiente:¿Cómo puedo pasar argumentos al comando de devolución de llamada del botón Tkinter?

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

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

Cuando hago clic ButtonA, se produce un error, text not defined.

Entiendo este error, pero ¿cómo puedo pasar el texto de ButtonA a lambda?

+1

posible duplicado de [pasa el argumento en Python comando de botón Tkinter] (http://stackoverflow.com/questions/6920302/passing-argument-in-python-tkinter-button-command). El otro sucedió 5 horas antes por otro usuario. Increíble coincidencia! –

Respuesta

20

Esto debería funcionar:

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

Para obtener más información echar un vistazo a Tkinter Callbacks

+0

Fantástica solución –

+0

Necesito llamar a mi función usando 'lambda: self.MyFunction (MyParam)' ¿No estoy seguro si vale la pena editarla? – WhatsThePoint

2

El texto no es una función en su caso. Sólo tómalo como:

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

Y lo conseguirás.

+0

Esta respuesta no muestra cómo imprimir "hola, " como lo hace la pregunta. –

+0

De acuerdo, no leí la pregunta por completo. Usted acaba de definir el valor del texto antes y enviarlo a la devolución de llamada lamdba. –

Cuestiones relacionadas