Обработка нескольких окон в PyGTK / GtkBuilder

1

Как я могу хранить несколько разных окон/диалогов в одном файле GtkBuilder, а затем загружать эти окна в разные классы (каждый класс соответствует другому окну)? Например, в настоящее время я делаю такие вещи, как:

def __init__(self):
    self.builder = gtk.Builder()
    self.builder.add_from_file('gtkbuilder.xml')
    self.welcome_dialog = self.builder.get_object('welcome_dialog')
    self.builder.connect_signals(self)
    self.welcome_dialog.show()

Это создает функциональную часть программного обеспечения, но она выплевывает всевозможные предупреждения, например:

welcome_dialog.py:38: RuntimeWarning: missing handler 'on_contract_window_response'
  self.builder.connect_signals(self)

для каждого из обработчиков сигналов, которые я определил в Glade для всех остальных окон. Я предполагаю, что все, что я хочу сделать, это подключить сигналы для этого окна/диалога и игнорировать все остальное, но я не уверен, как это сделать. Или, может быть, я делаю что-то ужасно неправильно, и я должен разбивать каждое окно в другой файл GtkBuilder? Или соединять сигналы для каждого окна в одно и то же (начальное) время?

Теги:
glade
pygtk

1 ответ

7
Лучший ответ

Использование gtk.Builder.add_from_file добавляет всю иерархию из вашего файла в объект Builder, поэтому вы получаете предупреждения о соединении с сигналом; вызов builder.connect_signals() пытается подключить все.

Вместо этого используйте gtk.Builder.add_objects_from_file, чтобы выбрать отдельное окно или виджет уровня top-, который вы хотите обработать в текущем классе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню