Могу ли я загрузить приложение gtkbuilder в «родительский» кадр gtkbuilder? - PullRequest
2 голосов
/ 23 сентября 2010

Я использую Glade-3 для создания набора приложений Gtk.

Предполагается, что приложения имеют общий внешний вид, и мы определили общую «рамку», которую будут использовать все приложения, включая строку меню, панель инструментов, строку (и) состояния, вертикальную панель - и пространство в середине, которое будет заполнено каждым приложением.

Эта общая "рамка" разработана с использованием Glade-3 и сохранена в формате Gtkbuilder.

Что я хотел бы сделать, так это спроектировать «среднюю часть» для каждого приложения, используя Glade-3, а затем каким-то образом загрузить ее в родительский фрейм.

Возможна ли такая вещь? Я не возражаю переписать родительский фрейм в Gtk, поскольку он довольно прост - главное в деталях приложения, которые мы определенно хотим разработать с помощью Glade.

Я не видел способа каким-либо образом получить результат чтения файла Gtkbuilder и вставить его в родительский виджет.

Я использую Perl / Gtk2.

1 Ответ

2 голосов
/ 23 сентября 2010

Вы можете сделать все это с помощью GtkBuilder.Например, учитывая эти файлы пользовательского интерфейса:

<!-- parent.ui -->
<interface>
    <object class='GtkWindow' id='window'/>  <!-- See #1 -->
</interface>

<!-- child1.ui -->
<interface>
    <object class='GtkLabel' id='content'>  <!-- See #2 -->
        <property name='label'>Hello World</property>
    </object>
</interface>

<!-- child2.ui -->
<interface>
    <object class='GtkLabel' id='content'>  <!-- See #2 -->
        <property name='label'>Hi there</property>
    </object>
</interface>

, вы можете построить два окна, используя следующий код (в Python, извините; я не знаком с привязками Perl).

def build(child_filename):
    builder = gtk.Builder()
    builder.add_from_file('parent.ui')
    builder.add_from_file(child_filename)
    window = builder.get_object('window')  #1
    content = builder.get_object('content')  #2
    window.add(content)
    window.show_all()
    return window

window1 = build('child1.ui')
window2 = build('child2.ui')

Вы также можете создать несколько копий одного окна, если хотите.

...