Управление окнами с помощью pygtk - PullRequest
0 голосов
/ 10 января 2010

У меня проблема с окнами PyGTK и GTK Builder. Вот упрощенная версия моего кода.

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

Файл gtk builder содержит окно верхнего уровня с горизонтальной упаковочной коробкой и сигналом для уничтожения. Кажется, это работает, и окно создается и заполняется очень хорошо, но если я попытаюсь уничтожить окно, которое было заполнено любыми другими виджетами Python segfaults.

Я думаю, что это проблема с упаковкой новых виджетов, которых нет в файле компоновщика, поэтому pygtk не знает, как их уничтожить, но я не уверен.

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 23 января 2010

Использование gtk.main_quit().

def on_destroy(self):
    gtk.main_quit()
0 голосов
/ 11 января 2010

Ваш обработчик уничтожения вызывается, когда окно еще не уничтожено, поэтому фрагмент кода:

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

будет генерировать бесконечный рекурсивный вызов. Другими словами, вы уничтожаете то, что еще разрушается.

Это не имеет ничего общего с GtkBuilder или виджетами с ручной кодировкой, но я подозреваю, что чего-то не хватает, потому что не знаю, зачем вам нужно что-то подключать к GtkWindow :: destroy.

...