Hola: El día 24 de enero de 2010 16:31, Andreina Mejia <[email protected]> escribió: > 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/22491...@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!
Yo creo que el problema puede ser que estas usando la señal "destroy" para implementar lo que pasa la presionar el botón X (cerrar) de la ventana. Intenta usando "delete-event" en lugar de "destroy" que es la señal que se manda cuando se intenta cerrar una ventana. Manuel. _______________________________________________ Python-es mailing list [email protected] http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
