Вопрос

У меня возникла проблема с окнами 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.

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

def on_destroy(self):
    gtk.main_quit()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top