Gtk Entry Activarlo y aceleradores

Guillermo Heizenreder gheize en gmail.com
Dom Sep 16 13:17:39 CEST 2007


El dom, 16-09-2007 a las 01:38 +0200, Arnau Sanchez escribió:
> Guillermo Heizenreder escribió:
> 
> > def on_entry_activate(self,widget,other):
> >         other.grab_focus()
> >     def conect_entry_enter(self):
> 
> Unos detalles de estilo: el PEP8 recomienda poner espacios después de 
> las comas (y con razón, queda todo más claro). La docstring del método 
> conect_entry_enter() se ve también un poco rara. En general, siempre que 
> te desvíes del PEP8 dificultarás la lectura a otros programadores. 
> Aunque quien esté libre de pecado que tire la primera piedra :-)
:S
Estoy tratando a los golpes de seguir la PEP8, hace poco que comenzé con
el lenguaje y siempre programe solo, pero ahora lo hacemos en equipo,
asique es muy cierto lo que decis vos de seguir los estandares.

> 
> >         self.entry_legajo_empleado.connect("activate",
> >                 self.on_entry_activate,
> >                 self.entry_apellido_empleado)
> >         self.entry_apellido_empleado.connect("activate",
> >                 self.on_entry_activate,
> >                 self.entry_nombre_empleado)
> >         self.entry_nombre_empleado.connect("activate",
> >                 self.on_entry_activate,
> >                 self.entry_codigo_clasificacion)
> >         self.entry_codigo_clasificacion.connect("activate",
> >                 self.on_entry_activate,
> >                 self.entry_nombre_clasificacion)
> 
> Estás usando on_entry_activate() como método, cuando de hecho no usa 
> nada de la instancia (no accede a self). Tienes dos opciones: ponerla 
> fuera de la clase (no muy adecuado, ya que costará encontrarla) o mejor, 
> ponerla como función anidada, que es como te mostraré en el ejemplo (con 
> la ventaja de que, si hiciera falta, sí podrías acceder a la instancia, 
> ya que "self" queda en la clausura).
> 
> ¿Ves que tu código es muy repetitivo? eso es porque hay un patrón, y 
> debes sacar partido de ello. Podría quedar:
> 
> def connect_entry_enter(self):
>      def grab_focus(widget, other):
>          other.grab_focus()
>      path = (a, b, c, d)
>      for index in xrange(len(path)-1):
>          from0, to = path[index:index+2]
>          from0.connect("activate", grab_focus, to)
> 
> Donde a, b, c y d son los widgets puestos en el orden que quieras. Quizá 
> el path debiera ser un parámetro de la función connect_entry_enter().
Funciono a la perfección.

> Si nos ponemos exquisitos, la función de extraer los pares también se 
> puede abstraer:
> 
> def groups(lst, n, step=1):
>      for index in xrange(0, len(lst)-(n-1), step):
>          yield lst[index:index+n]
> 
> (si la entrada no fuera una lista/tupla sino un iterador, ver 
> http://docs.python.org/lib/itertools-recipes.html)
> 
> Y se usaría:
> 
> for from0, to in groups(path, 2):
>      from0.connect("activate", grab_focus, to)
> 
> Espero que te sirva,
> 
> arnau
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es

Muchas Gracias!.
Saludos!
:D
-- 
Heizenreder Guillermo
Code: http://code.google.com/u/gheize/
Blog: http://gheize.wordpress.com/

------------ próxima parte ------------
_______________________________________________
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