我可以将gtkbuilder应用程序加载到“父” gtkbuilder框架中吗?
-
04-10-2019 - |
题
我正在使用Glade-3来构建一套GTK应用程序。
这些应用程序应该具有共同的外观和感受,我们已经决定所有应用程序都将共享的常见“帧”,其中包括菜单栏,工具栏,状态栏,垂直面板 - 和每个应用程序将填写的中间空间。
这种常见的“框架”是使用Glade-3设计的,并以GTKBuilder格式保存。
我想做的是使用Glade-3 As-Well为每个应用程序设计“中间部分”,然后以某种方式将其加载到父框架中。
有可能吗?我不介意重写GTK中的父框架,因为它很简单 - 主要肉将在应用程序的特定细节中,我们绝对想使用GLADE设计。
我已经看不到以某种方式获得阅读GTKBuilder文件并将其粘贴到父窗口小部件中的结果。
我正在使用perl/gtk2。
解决方案
您可以使用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')
如果需要,您也可以构建同一窗口的多个副本。
不隶属于 StackOverflow