[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