Question

Je vais avoir un problème avec Windows PyGTK et GTK Builder. Voici une version simplifiée de mon 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()

Le fichier constructeur de gtk contient juste une fenêtre avec une boîte de premier niveau d'emballage horizontal et signal à la détruire. Cela semble fonctionner et la fenêtre est créée et très bien, mais si je tente de détruire la fenêtre qui a été peuplée avec d'autres widgets segfaults python.

Je pense cela, il est une question avec l'emballage de nouveaux widgets qui ne sont pas dans le fichier constructeur si pygtk ne sait pas comment les destory, mais je ne suis pas sûr que.

Merci pour toute aide.

Était-ce utile?

La solution

Votre gestionnaire « détruire » est appelée lorsque la fenêtre est encore dans la destruction, donc ce fragment de code:

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

va générer un appel récursif infini. En d'autres termes, vous détruisez quelque chose qui est encore détruite.

Cela n'a rien à voir avec GtkBuilder ou widgets code à la main, mais je pense que je me manque quelque chose parce que je ne sais pas pourquoi vous devez vous connecter quelque chose à GtkWindow :: détruire.

Autres conseils

Utilisez gtk.main_quit().

def on_destroy(self):
    gtk.main_quit()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top