Pregunta

Estoy teniendo un problema con PyGTK y GTK Builder ventanas. Aquí hay una versión simplificada de mi código.

class GUI:
def __init__(self,parent):
    builder_file = "./ui/window.builder"
    self.builder = gtk.Builder()
    self.builder.add_from_file(builder_file)

    self.window = self.builder.get_object('main')
    self.builder.connect_signals( self )
    self.populate_window()
    self.window.show()

def populate_window(self):
    hbox = self.builder.get_object('hbox')
    hbox.pack_start( somewidgets )

def on_destroy(self):
    self.window.destroy()

El archivo constructor de GTK solo contiene una ventana de nivel superior con una caja de embalaje horizontal y señal al destruir. Esto parece funcionar y se crea y se llena bien la ventana, pero si trato de destruir la ventana que se ha rellenado con cualquier otro segfaults widgets de pitón.

Estoy pensando que esto es algún problema con el embalaje nuevos widgets que no están en el archivo constructor de modo pygtk no sabe cómo destory ellos, pero no estoy segura, sin embargo.

Gracias por cualquier ayuda.

¿Fue útil?

Solución

Su "destruir" gestor se llama cuando la ventana está aún en la destrucción, por lo que este fragmento de código:

def on_destroy(self):
    self.window.destroy()

generará una llamada recursiva infinita. En otros términos, usted está destruyendo algo que aún está siendo destruido.

Esto no tiene nada que ver con GtkBuilder o widgets de codificación manual, pero sospecho que me falta algo, porque no sé qué tiene que conectar algo que GtkWindow :: destruir.

Otros consejos

Uso gtk.main_quit().

def on_destroy(self):
    gtk.main_quit()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top