Re: Eventos señales y demás

Miuler miuler en gmail.com
Mie Dic 26 10:59:29 CET 2007


Ok, gracias por tu correo, si efectivamente lo que quiero es +- ;-)
Lo que quiero es que todas las ventanas sean capaces de capturar una
señal cuando es emitida en cualquier lado, en este caso si presiono
cualquiera de los botones, las dos ventanas deberían atenderla,
realmente no quiero pasarle como parametro una variable con las
ventanas, porque podría existir N ventanas, esto lo podría solucionar
pasandole una unica variable que contenga la lista de todas las
ventanas existentes y hacer un for en todas ellas, para ir emitiendo
uno por uno la señal, pero esto no es lo que quiero, yo quiero emitir
una sola ves un evento o señal o lo que sea, y que todas las ventanas
suscritas a este evento reaccionen, la señal se puse nombre sync, por
referencia a sincronizar.

En resumen, quiero hacer un emit general, y que todas las ventanas
reaccionen, es posible esto? :(


On Dec 26, 2007 4:04 AM, Arnau Sanchez <pyarnau en gmail.com> wrote:
>  > Ok, primero, no sabía que no se permitía atachados, por lo que no
>  > profundicé más en el codigo, por eso no especifique que era gtk.
>
> Vale, creo que fui un poco brusco en el otro correo; al tratar de GTK es
> aceptable enviarlo a las dos listas (aunque no es práctica habitual).
>
> Si entiendo bien la pregunta, esperas que al dar a un botón las dos
> ventanas capturen la señal, pero en el código no parece estar
> establecida esa relación. En el callback obtienes la ventana padre y la
> haces un emit, pero sólo a esa.
>
> ¿Es este el comportamiento que deseas? (en vez de get_parent() uso
> argumentos del callback).
>
> (Es inusual crear una señal para esto, pero bueno, alguna razón tendrás)
>
> #!/usr/bin/python
> # -*- encoding:utf-8 -*-
> import gtk
> import gobject
>
> gobject.signal_new('sync', gtk.Window,
>                     gobject.SIGNAL_RUN_LAST|gobject.SIGNAL_ACTION,
>                     gobject.TYPE_NONE, ())
>
> def emitir_signal(button, window, other_window):
>      print 'Señal emitida por: %s' % window.get_title()
>      window.emit('sync')
>      other_window.emit('sync')
>
> def captura_signal(a=None, b=None):
>      print 'Señal capturada por: %s' % a.get_title()
>
> ## Creando los widgets 1
> win1 = gtk.Window()
> vbox1 = gtk.VBox()
> button1 = gtk.Button('Boton 1')
> ## seteo de los widgets
> vbox1.pack_start(button1)
> win1.set_title('Ventana 1')
> win1.set_default_size(200, 150)
> win1.connect('destroy', gtk.main_quit)
> win1.connect('sync', captura_signal)
> win1.add(vbox1)
> win1.show_all()
>
> ## Creando los widgets 2
> win2 = gtk.Window()
> vbox2 = gtk.VBox()
> button2 = gtk.Button('Boton 2')
> ## seteo de los widgets
> vbox2.pack_start(button2)
> win2.set_title('Ventana 2')
> win2.set_default_size(200, 150)
> win2.connect('destroy', gtk.main_quit)
> win2.connect('sync', captura_signal)
> win2.add(vbox2)
> win2.show_all()
>
> button1.connect('clicked', emitir_signal, win1, win2)
> button2.connect('clicked', emitir_signal, win2, win1)
>
> gtk.main()


-- 
     _\|/_
     (O-O)
--oOO-(_)-OOo----------------------------------------
Hector Miuler Malpica Gallegos
Universidad Nacional del Callao - Peru
Escuela de Ingenieria Electronica

usuario registrado #308608
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


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