[Python-es] Problemas con el Diseñador de interfaces Glade y PyGTK
Andreina Mejia
andreinamejia en gmail.com
Dom Ene 24 22:31:29 CET 2010
Buenas tardes, mi nombre es Andreina Mejía. Estoy realizando una aplicación
con interfaz hecha en Glade 3.6.7 y PyGTK. Para exponer mi problema,
realicé dos pruebas pequeñas que les muestro a continuación:
Hice una interfaz realmente sencilla en formato Libglade, una ventana con
un botón insertado dentro de una tabla como se puede apreciar en
http://www.flickr.com/photos/22491163@N06/sets/72157623276353544/detail/
El botón Aceptar muestra la ventana de diálogo con textview. Todo funciona
bien, excepto el destroy de la ventana de diálogo, porque cuando le doy
click por segunda vez a la ‘X’ sale en la consola: “Fallo de segmentación”
El archivo .py es el siguiente:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Importacion de modulos
import pygtk
pygtk.require('2.0')
import gtk, gtk.glade, inspect, sys
class Ventana:
def __init__(self):
self.w_tree = gtk.glade.XML('Prueba.glade')
self.Ventana = self.w_tree.get_widget('Ventana')
self.Aceptar = self.w_tree.get_widget('Aceptar')
#Ventana que se muestra al pulsar el boton Aceptar de la ventana
principal
self.Dialogo = self.w_tree.get_widget('Dialogo')
self.Acepta = self.w_tree.get_widget('Acepta')
self.Cancelar = self.w_tree.get_widget('Cancelar')
self.texto = self.w_tree.get_widget('texto')
#Se hacen todas las conexiones con las señales
self.w_tree.signal_autoconnect(dict(inspect.getmembers(self)))
def on_Ventana_destroy(self,*args):
gtk.main_quit()
def on_Aceptar_clicked(self,*args):
self.Dialogo.show()
def on_Dialogo_close(self,*args):
self.Dialogo.hide()
def on_Cancelar_clicked(self,*args):
self.Dialogo.hide()
def on_Acepta_clicked(self,*args):
self.Dialogo.hide()
def main(self,*args):
self.Ventana.show()
gtk.main()
if __name__=="__main__":
app = Ventana()
app.main()
Inicialmente probé con radiobuttons insertados en una caja horizontal en la
ventana de diálogo, pero da el mismo problema, por eso en el ejemplo cambié
de contenedor y de widget a ver qué pasaba, pero sigue dando el mismo error.
Hablé con un amigo y me dijo que a lo mejor podía ser un problema con
Libglade y que mejor intentara con GtkBuilder.
Hice exactamente la misma interfaz y lo corrí, doy click por segunda vez a
la ‘X’ de la ventana de diálogo y aparece la ventana vacía que se ve en el
enlace de flirck.
No hay ningún otro fallo en la corrida.
El archivo .py es el siguiente:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Importacion de modulos
import pygtk
pygtk.require('2.0')
import gtk, gtk.glade, inspect, sys
class Ventana:
def __init__(self):
self.glade_file = "Prueba_gb.glade"
self.glade = gtk.Builder()
self.glade.add_from_file(self.glade_file)
self.Ventana = self.glade.get_object('Ventana')
self.Aceptar = self.glade.get_object('Aceptar')
#Ventana que se muestra al pulsar el boton Aceptar de la ventana
principal
self.Dialogo = self.glade.get_object('Dialogo')
self.Acepta = self.glade.get_object('Acepta')
self.Cancelar = self.glade.get_object('Cancelar')
self.texto = self.glade.get_object('texto')
#Se hacen todas las conexiones con las señales
self.Ventana.connect("destroy",self.__on_Ventana_destroy)
self.Aceptar.connect("clicked",self.__on_Aceptar_clicked)
self.Dialogo.connect("close",self.__on_Dialogo_close)
self.Cancelar.connect("clicked",self.__on_Cancelar_clicked)
self.Acepta.connect("clicked",self.__on_Acepta_clicked)
#Muestra todos los widgets
self.Ventana.show_all()
def __on_Ventana_destroy(self,*args):
gtk.main_quit()
def __on_Aceptar_clicked(self,*args):
self.Dialogo.show()
def __on_Dialogo_close(self,*args):
self.Dialogo.hide()
def __on_Cancelar_clicked(self,*args):
self.Dialogo.hide()
def __on_Acepta_clicked(self,*args):
self.Dialogo.hide()
def main(self,*args):
#self.Ventana.show()
gtk.main()
if __name__=="__main__":
app = Ventana()
app.main()
La verdad no sé qué está pasando, pero cada vez que en Glade hago una
ventana que “llama” a otra ventana pasa lo mismo. Tengo apenas unos meses
trabajando en esta herramienta y programando en PyGTK. Agradezco de
antemando su receptividad. Muchas gracias!
P.D: Disculpen lo extenso del correo…
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100124/a05944b1/attachment.html>
Más información sobre la lista de distribución Python-es