Tkinter: Argumentos en un manejador de evento

Ernesto Revilla erny en sicem.biz
Lun Oct 24 12:36:39 CEST 2005


Sí, eso se puede hacer, usando expresiones lambda, que es un creador de 
funciones anónimas.

la pregunta es: ¿de dónde sale el parámetro archTemp ? ¿Es una variable 
que ya tiene su valor definitivo al crear el botón, o varía?

prueba con esto:

boton = Button(root, text='Guardar como GIF', command=lambda : guardaGIF(archTemp))

el tema es que si la función ("anónima") definida por lambda puede 
encontrar archTemp. Si no, puedes probar con esto:

boton = Button(root, text='Guardar como GIF', command=lambda archivo=archTemp: guardaGIF(archivo))

Eso es que estás creando una función que recibe un parámetro cuyo valor 
por defecto es archTemp. En este caso, se liga el valor por defecto de x 
en el momento de crear la función anónima, de manera que si cambias 
archTemp, eso ya no es tenido en cuenta. Quizá sería mejor que usaras la 
primera forma, pero con alguna variables globalmente accesible:

class ...:
     def __init__(self, ...):
           self.archTemp="..."
     ...
     def  ....(self, ...):
         boton = Button(root, text='Guardar como GIF', command=lambda 
s=self: guardaGIF(s.archTemp))

o algo así.

Erny


Gerardo Juarez wrote:

>Hola a todos, tengo una duda. Estoy haciendo un programa usando Tkinter. 
>Tengo, obviamente, muchos puntos donde requiero un widget y un comando 
>asociado a su evento de activacion. Por ejemplo,
>
>boton = Button(root, text='Guardar como GIF', command=guardaGIF)
>
>En varios casos, encuentro que me ayudaria muchisimo poder enviar 
>parametros al comando. Algo asi como:
>
>boton = Button(root, text='Guardar como GIF', command=guardaGIF(archTemp))
>
>Es esto posible? Lo he intentado, pero aunque no me da error de sintaxis,
>no funciona. Algo similar pasa con instrucciones de la forma:
>
>root.after(1000, despliega)
>
>Hasta ahora, mi solucion es via variables globales o funciones 'wrapper'. 
>Alguien podria sugerir una alternativa?
>
>Saludos y gracias,
>Gerardo
>
>
>  
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Python-es mailing list
>Python-es en aditel.org
>http://listas.aditel.org/listinfo/python-es
>  
>




Más información sobre la lista de distribución Python-es