[pyar] PyGTK / Glade: Manejando distintas ventanas en distintas clases

Juan Manuel Santos vicariousdm en gmail.com
Dom Mar 6 17:49:20 ART 2011


On Sunday, March 06, 2011 12:49:53 Facundo Batista wrote:
> Tengo [0] un gui.glade con una interfaz que es una ventana principal,
> que en un momento dispara un diálogo que hace cosas.
> 
> La ventana principal, al arrancar, hace algo como:
> 
> class MainUI(object):
>     def __init__(self):
>         self.builder = gtk.Builder()
>         self.builder.add_from_file('gui.glade')
>         self.builder.connect_signals(self)
> 
> Si meto todo el manejo de todos los widgets en esta clase, funca todo
> bárbaro. Pero es un asco, porque queda todo el código mezclado (y hay
> que cuidar que no se pisen o confundan los nombre todos los widgets
> que están en distintas partes de la GUI y que no tienen nada que ver).
> 
> Sí, uno podría usar prefijos, y convenciones, pero también se podría
> ordernar el código.
> 
> Entonces quise separar el código en dos clases, una MainUI que maneja
> la ventana princial, y una DialogoUI que se instancia cuando el
> diálogo se abre y sólo conoce todo lo que está adentro del diálogo
> ese, y listo.
> 
> Mi problema es cómo conectar las señales a una clase y a la otra.
> 
> Porque si pongo un "self.builder.connect_signals(self)" en ambas
> clases, en MainUI me tira warnings de que no encontró los handlers
> para las cosas del diálogo, y en DialogUI *no conecta nada*.
> 
> Siguiendo la documentación [1], veo que la signatura de Builder es
> "connect_signals(object, user_data)"... ese 'user_data' no tengo idea
> que es, pero ese 'object' puede ser un diccionario en el que le
> especifico qué cosas conectar y cuales no.
> 
> Sin embargo, si en cada clase pongo un diccionario donde las
> clave/valor son las señales y los métodos, algo como...
> 
>         main.builder.connect_signals({
>             'on_update_dialog_destroy': self.on_update_dialog_destroy,
>         })
> 
> ...en MainUI me sigue tirando los warnings, y en DialogUI no me conecta
> nada.
> 
> Encontré en la web [2] a alguien preguntando exactamente lo mismo,
> pero sin respuesta.
> 
> ¿Alguien tendrá una idea de cómo hacer esto?
> 
> Muchas gracias, slds.
> 
> [0] Es algo construyéndose a partir del caos, el encuentro.py y
> gui.glade están a medio armar, el resto es fruta, pero sirve si
> quieren ver más forma de lo que comento (pero antes de separarlo en
> dos clases): http://tools.assembla.com/svn/homedevel/devel/encuentro/
> [1]
> http://library.gnome.org/devel/pygtk/stable/class-gtkbuilder.html#method-gt
> kbuilder--connect-signals [2] http://www.gtkforums.com/about1514.html

No te conviene tener .glade separados para cada ventana, y tener clases que 
instancien su respectivo .glade? Así es al menos como lo hago yo. Nunca me 
gustó poner más de una ventana en un mismo .glade

Saludos
Juan Manuel



More information about the pyar mailing list