gtk.Builder, подкласс контейнера и привязка дочерних виджетов

StackOverflow https://stackoverflow.com/questions/411708

Вопрос

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

#!/usr/bin/env python

import sys 
import gtk 

class MyDialog(gtk.Dialog):
    __gtype_name__ = "MyDialog"


if __name__ == "__main__":
    builder = gtk.Builder()
    builder.add_from_file("mydialog.glade")

    dialog = builder.get_object("mydialog-instance")
    dialog.run()

Теперь вопрос в том, что, скажем, у меня есть виджет gtk.TreeView внутри этого диалога.Я пытаюсь понять, как связать этот виджет с переменной экземпляра MyDialog.

Я могу придумать одну дешевую альтернативу — вызвать дополнительный метод после получения диалогового виджета следующим образом:

dialog = builder.get_object("mydialog-instance")
dialog.bind_widgets(builder)

Но это кажется довольно неловким.Кто-нибудь уже решил это или имеет лучшее представление о том, как это сделать?

Спасибо,

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

Решение

Хорошо, думаю, я ответил на свой вопрос.

Один из способов сделать вышеперечисленное — переопределить функцию parser_finished() gtk.Buildable, которая предоставляет доступ к объекту-строителю, который создал сам экземпляр класса.Метод вызывается после загрузки всего файла .xml, поэтому все дополнительные виджеты, которые мы можем захотеть получить, уже присутствуют и инициализированы:

class MyDialog(gtk.Dialog, gtk.Buildable):
    __gtype_name__ = "MyDialog"

    def do_parser_finished(self, builder):
        self.treeview = builder.get_object("treeview1")
        # Do any other associated post-initialization

Следует отметить, что по какой-то причине (по крайней мере для меня, в pygtk 2.12), если я не наследую явно от gtk.Buildable, метод переопределения не вызывается, даже если gtk.Dialog уже реализует сборку. интерфейс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top