glade

Lorenzo Gil Sanchez lgs en sicem.biz
Jue Ago 21 11:35:12 CEST 2003


No se exactamente lo que hace el autoconnect intermante pero a mi me
funciona con el self, lo has probado? Acabo de volver a probarlo esta
vez con tu archivo de glade y funciona. Cunado pulso en el boton esto es
la salida que me da:

[lgs en i8100 lgs]$ python iface.py
hola
<__main__.Application instance at 0x824172c>
<gtk.Button object (GtkButton) at 0x82aec14>
<GdkEvent at 0x82b23c8>

Este es el codigo:

import pygtk
pygtk.require("2.0")
  
import gtk, gtk.glade
  
class Application:
    def __init__(self):
        self.widgets = gtk.glade.XML('iface.glade')
        self.widgets.signal_autoconnect(self) # <-  OJO al self
  
    def on_button1_clicked(self, button, event):
        print self
        print button
        print event

app = Application()
gtk.main()


Te lo adjunto por si quieres probarlo tu.

Lorenzo


El jue, 21-08-2003 a las 11:12, dvilla en gmx.net escribió:
> 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.py
Type: text/x-python
Size: 365 bytes
Desc: no disponible
URL: <http://mail.python.org/pipermail/python-es/attachments/20030821/f8a080a7/attachment.py>
------------ 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