Frage

ich habe ein Problem mit PyGTK und GTK Builder Fenster. Hier ist eine vereinfachte Version von meinem Code.

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()

Die gtk-Builder-Datei enthält nur ein Top-Level-Fenster mit einer horizontalen Stopfbuchse und Signal an den zerstören. Dies scheint zu arbeiten und das Fenster wird erstellt und einfach gut bevölkert, aber wenn ich versuche, das Fenster zu zerstören, die mit anderen Widgets Python segfaults bevölkert wurde.

Ich denke, das es einige Problem ist mit neuen Widgets Verpackung, die nicht in der Builder-Datei sind so pygtk nicht weiß, wie sie destory, aber ich bin nicht sicher, though.

Vielen Dank für jede Hilfe.

War es hilfreich?

Lösung

Ihr „zerstören“ Handler wird aufgerufen, wenn das Fenster noch in der Zerstörung ist, so dieses Codefragment:

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

wird einen unendlichen rekursiven Aufruf erzeugen. Mit anderen Worten, zerstören Sie etwas, das noch zerstört wird.

Das hat nichts mit GtkBuilder oder per Hand codierte Widgets zu tun, aber ich vermute, ich bin etwas fehlt, weil ich weiß nicht, warum Sie zu verbinden, etwas zu GtkWindow brauchen :: zerstören.

Andere Tipps

Mit gtk.main_quit().

def on_destroy(self):
    gtk.main_quit()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top