Seguimos con nuestro particular estudio de Python y nuestro pequeño programa.
Hasta ahora, hemos visto como hacer uso de Glade, y vemos como conectamos las respectivas señales.
#Create object gtk.Window , from load window the gladeself.window = self.glade.get_object('consultas')# Example connect manual signal.self.window.connect("destroy", self.destroy)
Si le echamos un vistazo al commit 78f6437,podemos observamos los cambios que teníamos anteriormente, git diff 753f400 78f6437 , observaremos como podemos determinar en Glade donde tiene que saltar.
En la imagen de tinnydb.ui puedes ver donde tienes que declarar que señal
vamos a controlar.
En este caso, vamos a controlar el evento delete-event.
En Gtk, este evento se dispara ANTES del destroy, y por ejemplo, podemos usarlo para preguntar si queremos salir de la aplicación o no.
Eso se consigue simplemente deteniendo la propagación de la señal al sistema de eventos de GTK, o por el contrario dejamos a Gtk que siga su curso, en este caso, sería el salto a la señal destroy.
¿ Pero no habíamos conectado manualmente el destroy ? Cierto. Podemos conectarlo combinándolo glade, además, las señales que conectamos se suman a las existen no se eliminan, aunque yo jamás lo he realizado, la teoría es simple: Para un mismo evento de Gtk, se puede disparar una o varias señales.
( Un poco de teoría de Gtk tampoco viene mal ;-) )
Bueno, seguimos. ¿ Como le decimos que use las señales definidas en Glade ?
# From Glade, signal delete_event the window consultas, at class Handler.self.glade.connect_signals( Handler() )
Ya está, muy simple. Esto lo que hace es que decirme que clase va a tratar los eventos.
Creamos la clase que quiero que procese las señales;
class Handler():def delete_event(self, widget,data=None):print( "Call from Glade." )# TIP:if you return 0 , destroy, but if you return 1, stop , not kill program# TODO: Here create dialog ask if I want exit programreturn 0
Esto lo he realizado a propósito para que veáis lo que podemos hacer.
Podía hacer realizado;
self.glade.connect_signals( self )
Ahora es nuestra propia clase principal, lo que tendrá un método llamado delete_event que gestiona esa señal.
También se puede conectar señales de esta manera;
#Create our dictionay and connect it
dic = { "delete_event" : self.delete_event, "destroy" : gtk.main_quit } self.window.signal_autoconnect(dic)
Hasta aquí un poquito de PyGtk , Glade y sus señales.
No hay comentarios:
Publicar un comentario