我可以将gtkbuilder应用加载到“父”gtkbuilder框架中吗?

时间:2010-09-23 00:49:31

标签: gtk gtk2 gtkbuilder

我正在使用Glade-3构建一套Gtk应用程序。

应用程序应该具有共同的外观,我们已经决定了所有应用程序将共享的通用“框架”,其中包括菜单栏,工具栏,状态栏,垂直面板 - 以及每个应用程序将填写的中间空间。

这个常见的“框架”是使用Glade-3设计的,并以Gtkbuilder格式保存。

我想做的是使用Glade-3为每个应用程序设计“中间部分”,然后以某种方式将其加载到父框架中。

这样的事情可能吗?我不介意在Gtk中重写父框架,因为它非常简单 - 主要的内容将是我们绝对想要使用Glade设计的应用程序特定细节。

我看不出以某种方式获取读取Gtkbuilder文件的结果,并将其粘贴到父窗口小部件中。

我正在使用Perl / Gtk2。

1 个答案:

答案 0 :(得分:2)

你可以使用GtkBuilder完成所有这些工作。例如,给定这些UI文件:

<!-- 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')

如果需要,您还可以构建同一窗口的多个副本。