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

Facundo Batista facundobatista en gmail.com
Dom Mar 6 12:49:53 ART 2011


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-gtkbuilder--connect-signals
[2] http://www.gtkforums.com/about1514.html

-- 
.    Facundo

Blog: http://www.taniquetil.com.ar/plog/
PyAr: http://www.python.org/ar/



More information about the pyar mailing list