Tkinter: Argumentos en un manejador de evento

Joaquin Jose del Cerro Murciano jjdelcerromurciano en yahoo.es
Mie Oct 26 15:57:13 CEST 2005


...
>
>
> Sabiendo esto, la solución del problema sería algo así:
>
> class MyArchivo:
>   def __init__(self, archivo):
>     self.archivo=archivo
>   def guardaGIF(self):
>     archivo=self.archivo
>     ...
>
> ar=MyArchivo("fichero.gif")
> boton = Button(root, text='Guardar como GIF', command=ar.guardaGIF)
>
> Ésta es la idea general, aunque quedaría más robusto encapsular en
> subclases los widgets junto con los comandos que aceptan. Pero esto
> sería mejor hablarlo para otra ocasión.
>

Siguiendo este mismo hilo yo suelo gastar una clase a modo de "wraper para 
todo" (en lo que a tkinter se refiere) algo como esta:

class Command(object):
  def __init__(self, funcion, *args,**options):
    self._funcion = funcion
    self._args = args
    self._options = options
  
  def __call__(self, *args, **options):
    # Me como los parametros que le lleguen y los ignoro.
    self._funcion(*self._args, **self._options)

La clase recibe la funcion que ha de invocar y sus parametros, 
se guarda todo ello y cuando se invoca a la instancia del objeto
se llama a la funcion con los parametros que se indicaron.

Y para usarla, simplemente....

boton = Button(
  root, 
  text="Guardar como GIF", 
  command=Command(guardaGIF,"fichero.gif")
)

Un saludo 
Joaquin

	
	
		
______________________________________________ 
Renovamos el Correo Yahoo! 
Nuevos servicios, más seguridad 
http://correo.yahoo.es




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