glade

dvilla en gmx.net dvilla en gmx.net
Jue Ago 21 11:12:18 CEST 2003



Hola:

Te mando el .glade pero es muy tonto, es una ventana con un botón. 
Lo de pasar la referencia al objeto no parece funcionar. Se supone que el
autoconnect sólo admite diccionarios, no?. Autoconnect compara las cadenas
definidas en el diccionario con los handlers del .glade. self.__class__.__dict__
es lo mismo que Application.__dict__ pero esos diccionarios tienen referencias a
los métodos como si fuesen estáticos, es decir, no se especifica ninguna
referencia a ningún objeto.


El 21 Aug 2003 10:18:05 +0200
Lorenzo Gil Sanchez <lgs en sicem.biz> escribió:

> A ver si ahora te he entendido bien:
> 
> import pygtk
> pygtk.require("2.0")
>  
> import gtk, gtk.glade
>  
> class Application:
>     def __init__(self):
>         self.widgets = gtk.glade.XML('ejemplo.glade')
>         self.widgets.signal_autoconnect(self) # <-  OJO al self
>  
>     def on_button1_clicked(self, *args):
>         print 'hola'
>         print self, args
> 
> app = Application()
> gtk.main()
> 
> 
> creo que eso es lo que quieres
> 
> Un saludo
> 
> Lorenzo
> 
> NOTA: otra vez, mandame el archivo de glade please.
> 
> El mié, 20-08-2003 a las 22:20, dvilla en gmx.net escribió:
> > Hola:
> > 
> > Soy yo el que no se ha explicado bien. Necesito que el callback sea un
> > método(pero no un método clase), es decir, que no me sirve un método
> > estático. Esto es así porque dentro del método tengo que utilzar atributos
> > del objeto actual.
> > 
> > Prueba esto:
> > 
> > import pygtk
> > pygtk.require("2.0")
> >  
> > import gtk, gtk.glade
> >  
> > class Application:
> >     def __init__(self):
> >         self.widgets = gtk.glade.XML(gladefile)
> >         self.widgets.signal_autoconnect(Application.__dict__)
> >  
> >     def on_button1_clicked(self, *args):
> >         print 'hola'
> > 	print self, args
> > 
> > app = Application()
> > gtk.main()
> > 
> > Según te he entendido, tu dices que en 'self' viene la referencia a objeto y
> > en'args' el GtkWidget, pues no. Prueba y verás que en 'self' viene el
> > GtkWidget y en 'args' un GdkEvent.
> > 
> > Si haces un diccionario a mano, es decir:
> > 
> > import pygtk
> > pygtk.require("2.0")
> >  
> > import gtk, gtk.glade
> >  
> > class Application:
> >     def __init__(self):
> >         self.widgets = gtk.glade.XML(gladefile)
> > 	callbacks = {"on_button1_clicked": self.on_button1_clicked}
> >         self.widgets.signal_autoconnect(callbacks)
> >  
> >     def on_button1_clicked(self, *args):
> >         print 'hola'
> > 	print self, args
> > 
> > app = Application()
> > gtk.main()
> > 
> > Entonces si funciona bien: en 'self' viene la referencia al objeto y en
> > 'args' vienen el GtkWidget y el GdkEvent. Pero yo quiero saber si se puede
> > hacer con el signal_autoconnect.
> > 
> > Saludos.
> > 
> > 
> > El Wed, 20 Aug 2003 21:26:33 +0200
> > Lorenzo Gil Sanchez <lgs en sicem.biz> escribió:
> > 
> > > El mi_, 20-08-2003 a las 20:31, dvilla en gmx.net escribi_:
> > > Hola:
> > > > 
> > > > Alguien sabe si el signal_autoconnect() de libglade se puede utilizar de
> > > > modo que los callbacks sean m_todos no-de-clase. Este ejemplo me
> > > > funciona:
> > > > 
> > > > import pygtk
> > > > pygtk.require("2.0")
> > > > 
> > > > import gtk, gtk.glade
> > > > 
> > > > class Application:
> > > >     def __init__(self):
> > > >         self.widgets = gtk.glade.XML(gladefile)
> > > >         self.widgets.signal_autoconnect(Application.__dict__)
> > > > 
> > > >     def on_button1_clicked(widget, event):
> > > >         print 'hola'
> > > > 
> > > > 
> > > > Pero si on_button1_clicked() no es un m_todo de clase, es decir:
> > > > 
> > > >     def on_button1_clicked(self, widget, event):
> > > >         print 'hola'
> > > > 
> > > > Entonces el autoconnect no se entera y llama a este m_todo con 2
> > > > argumentos en lugar de tres. Alguien sabe si se puede hacer?
> > > > 
> > > > Veamos, tienes un fallo en lo siguiente: El callback para la senial
> > > > 'clicked' [1] es el siguiente
> > > 
> > > def callback(button):
> > >     pass
> > > 
> > > 
> > > o si es un metodo de clase
> > > 
> > > 
> > > def callback(self, button):
> > >    pass
> > > 
> > > 
> > > Por eso en tu ejemplo te funciona el metodo para una clase porque tienes
> > > la suerte de estar dandole 2 argumentos:
> > > 
> > > def on_button1_clicked(widget, event):
> > >      print hola
> > > 
> > > si haces esto
> > > 
> > > def on_button1_clicked(widget, event):
> > >      print widget, event
> > > 
> > > probablemente te des cuenta que tu argumento widget es en realidad de tipo
> > > Application y tu argumento event es de tipo gtk.Button
> > > 
> > > Despues de todo este rollo te respondo a tu pregunta:
> > > 
> > > import pygtk
> > > pygtk.require('2.0')
> > > import gtk
> > > import gtk.glade
> > > 
> > > def on_button1_clicked(button):
> > >      print 'hola'
> > > 
> > > widgets = gtk.glade.XML(gladefile)
> > > widgets.autoconnect(locals())
> > > 
> > > No se si me he explicado bien
> > > 
> > > Lorenzo Gil
> > > 
> > > [1]
> > > http://www.moeraki.com/pygtkreference/pygtk2reference/class-gtkbutton.html#signal-gtkbutton--clicked
> > > 
> > > 
> > 
> > 
> 
> 


------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: iface.glade
Type: application/octet-stream
Size: 1943 bytes
Desc: no disponible
URL: <http://mail.python.org/pipermail/python-es/attachments/20030821/c94a6414/attachment.obj>
------------ 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