[Python] gtk: widget y sus eventos
Hector Miuler M.G.
miuler en gmail.com
Jue Ago 3 06:16:23 CEST 2006
Hola, disculpa por los correos en html, estoy usando un cliente web (gmail).
Con respecto al codigo, lo que quiero lograr es lo que hace *
message_textview.py*, de ahí saque el ejemplo, el problema no es con jojo2
el problema es con jojo, ya que jojo es el que debería capturar el enter,
como lo hace en message_textview.py, la forma que tu me dices, claro que
funciona pero capturo todos los key_press, yo solo quiero capturar el enter,
nada más.
La verdad me estoy liando mucho con esto :P , ahora no se si crear la señal
o ya esta creado o como michi hacerlo :P . en el textview se hace el binding
del key_press del enter y lo metes en la señal mykeypress y no usar el
key_press_event por defecto que tiene.
2006/8/2, Arnau Sanchez <arnau en ehas.org>:
>
>
> Hector Miuler M.G. escribió:
>
> > Bueno amigos, por el momento no he conseguido mucho, aqui les dejo el
> > ejemplo que estoy tratando de que funcione.
>
> Hola Hector,
>
> Tus correos están llegados duplicados... y además uno de ellos en HTML,
> mira tu
> configuración de correo.
>
> No acabo de entender lo que planteas, pero diría...
>
> 1) No veo por qué tienes que hacer todo ese binding de señales, si
> importas una
> clase ya te llegarán los signals correspondientes. Estos funcionan como
> una
> cadena, y si nadie la para (y por defecto eso no ocurre), ese signal
> también
> llegará a tu widget.
>
> 2) Tu programa ya hace lo que le pides, intercepta los key-events del
> widget
> combo (ojo, no de sus componentes). Pero intuyo que quieres interceptar
> los
> key-events del entry, ¿es así? entonces conéctate a él, no al padre:
>
> #self.cmbbEntry.connect ('key_press_event',self.jojo2)
> entry = self.cmbbEntry.child
> entry.connect('key_press_event',self.jojo2)
>
> nos cuentas,
> arnau
>
> >
> >
> >
> > 2006/8/2, Hector Miuler M.G. < miuler en gmail.com <mailto:miuler en gmail.com
> >>:
> >
> > mmm... como te dije, no hay información, por ejemplo en
> > http://www.pygtk.org/pygtk2reference/class-gtktextview.html no veo
> > que eventos maneja internamente, en este caso el presionar enter es
> > un evento, y lo que hace es intertar un salto de linea.
> >
> > para que tengas una idea mas exacta, pego un ejemplo sacado de
> > gajim, donde te podras dar cuenta que este widget deribado no hace
> > lo que un textview normal hace al precionar enter.
> >
> >
> > 2006/8/2, Milton Galo Patricio <minoztro en gmail.com
> > <mailto:minoztro en gmail.com>>:
> >
> > http://www.pygtk.org/pygtk2reference/gtk-class-reference.html
> >
> > en ese link puedes observar todo lo referente a cada widget que
> > puedas
> > utilizar.
> >
> > 2006/8/2, Hector Miuler M.G. <miuler en gmail.com
> > <mailto:miuler en gmail.com>>:
> > >
> > > Hola amigos, estaba haciendo unas pruebas creando algunos
> > nuevos widgets
> > > basandome en otros, hasta aqui todo normal, luego quise
> añadir
> > un evento
> > > más, en este caso tome el ejemplo de un widget que usan en
> > gajim (cliente
> > > jabber), pero por más que intentaba no funcionaba, después de
> > seguir
> > > investigando el porque, me di cuanta que en el gajim usaban
> > otro widget,
> > > un
> > > TexView, mientras yo usaba un ComboBoxEntry, el problema es
> > que segun
> > > entiendo capturan un evento que ya existe y es tratado en el
> > textview (el
> > > Return) y yo intentaba hacer lo mismo en el comoboboxentry,
> > pero este no
> > > tiene ese evento, así que por más que pusiera :
> > >
> > > gtk.binding_entry_add_signal(MyComboBoxEntry,
> gtk.keysyms.Return,
> > > gtk.gdk.CONTROL_MASK, 'mykeypress',
> > > int, gtk.keysyms.Return , gtk.gdk.ModifierType,
> > gtk.gdk.CONTROL_MASK
> > > )
> > >
> > > No lo capturaba, en este caso tengo que crear primero el
> > evento, apenas lo
> > > pruebe y funcione, pego el ejemplo.
> > >
> > > Mi pregunta es: ¿como saber que eventos ya estan siendo
> manejados
> > > internamente por el widget? para ver si creo un evento o lo
> > capturo.
> > >
> > > PD. en mi ejemplo estoy usando python, por ser muy facil para
> > entender,
> > > pero
> > > esto se aplica todo, C, C++, C#, etc creo :P e buscado en
> las
> > diferentes
> > > documentaciones y no encuentro sobre mi pregunta, (pygtk, C,
> > gtk#, C++)
> > >
> > >
> > > --
> > > _\|/_
> > > (O-O)
> > > --oOO-(_)-OOo----------------------------------------
> > > Hector Miuler Malpica Gallegos
> > > Universidad Nacional del Callao - Peru
> > > Escuela de Ingenieria Electronica
> > >
> > > usuario registrado #308608
> > >
> > > _______________________________________________
> > > Python-es mailing list
> > > Python-es en aditel.org <mailto:Python-es en aditel.org>
> > > http://listas.aditel.org/listinfo/python-es
> > >
> > >
> > >
> >
> >
> > --
> > Milton Inostroza Aguilera
> > _______________________________________________
> > Python-es mailing list
> > Python-es en aditel.org <mailto:Python-es en aditel.org>
> > http://listas.aditel.org/listinfo/python-es
> >
> >
> >
> >
> > --
> >
> > _\|/_
> > (O-O)
> > --oOO-(_)-OOo----------------------------------------
> > Hector Miuler Malpica Gallegos
> > Universidad Nacional del Callao - Peru
> > Escuela de Ingenieria Electronica
> >
> > usuario registrado #308608
> >
> >
> >
> >
> > --
> > _\|/_
> > (O-O)
> > --oOO-(_)-OOo----------------------------------------
> > Hector Miuler Malpica Gallegos
> > Universidad Nacional del Callao - Peru
> > Escuela de Ingenieria Electronica
> >
> > usuario registrado #308608
> >
> >
> > ------------------------------------------------------------------------
> >
> > import gtk
> > from gtk import gdk
> > import gobject
> >
> > class SearchComboBoxEntry (gtk.ComboBoxEntry):
> > __gsignals__ = dict(
> > mykeypress = (gobject.SIGNAL_RUN_LAST |
> gobject.SIGNAL_ACTION,
> > None, # return value
> > (int, gtk.gdk.ModifierType ) # arguments
> > )
> > )
> > print __gsignals__
> >
> > def __init__(self, model=None, column=-1):
> > gtk.ComboBoxEntry.__init__(self, model=None, column=-1)
> >
> > # NO FUNCIONA PORQUE NO TIENE ESTA SEÑAL ESTE WIDGET,
> > # SOLO FUNCIONA SI EL WIDGET YA TIENE ESTA SEÑAL,
> > # CON ESTO CAPTURAMOS LA SEÑAL Y HACEMOS LO QUE NOSOTROS
> > # QUERAMOS. (esto solo es una conclución mia.)
> > # ENTER
> > gtk.binding_entry_add_signal(SearchComboBoxEntry, gtk.keysyms.Return,
> > 0, 'mykeypress',
> > int, gtk.keysyms.Return, gtk.gdk.ModifierType, 0)
> >
> > # Ctrl + Enter
> > gtk.binding_entry_add_signal(SearchComboBoxEntry, gtk.keysyms.Return,
> > gtk.gdk.CONTROL_MASK, 'mykeypress',
> > int, gtk.keysyms.Return, gtk.gdk.ModifierType,
> gtk.gdk.CONTROL_MASK)
> >
> >
> >
> >
> > class window_demo :
> > def __init__ (self):
> > self.handlers={}
> > self.win = gtk.Window()
> > self.vbox = gtk.VBox()
> > self.textview = gtk.TextView()
> > self.cmbbEntry = SearchComboBoxEntry ()
> > self.cmbbEntry.connect ('mykeypress', self.jojo)
> > self.cmbbEntry.connect ('key_press_event',self.jojo2)
> > self.vbox.pack_start (self.cmbbEntry)
> > self.vbox.pack_start (self.textview)
> > self.win.add (self.vbox)
> > self.win.connect ("delete_event", lambda a1,a2:
> gtk.main_quit())
> > self.win.show_all()
> >
> > def jojo (self, widget, event_keyval, event_keymod):
> > print 'JOJO1'
> > print event_keyval
> > print event_keymod
> >
> > def jojo2 (self, widget, event):
> > print 'JOJO2'
> > print event
> >
> > if __name__=='__main__':
> > win = window_demo ()
> > gtk.main()
> >
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Python mailing list
> > Python en listas.apesol.org
> > http://listas.apesol.org/mailman/listinfo/python
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
>
>
--
_\|/_
(O-O)
--oOO-(_)-OOo----------------------------------------
Hector Miuler Malpica Gallegos
Universidad Nacional del Callao - Peru
Escuela de Ingenieria Electronica
usuario registrado #308608
------------ 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