2010-09-23 52 views
2

我正在使用Glade-3來構建一套Gtk應用程序。我可以將gtkbuilder應用程序加載到「父級」gtkbuilder框架中嗎?

應用程序應該有一個共同的外觀和感覺,我們已經決定所有應用程序將共享的共同「框架」,其中包括菜單欄,工具欄,狀態欄,垂直面板 - 中間的空間將由每個應用程序填寫。

這個常見的「框架」是使用Glade-3設計的,並以Gtkbuilder格式保存。

我想要做的是爲每個使用Glade-3的應用程序設計「中間部分」,然後以某種方式將其加載到父框架中。

這樣的事情可能嗎?我不介意在Gtk中重寫父框架,因爲它非常簡單 - 主要的細節將在我們一定要使用Glade設計的應用程序特定細節中。

我看到沒有辦法以某種方式獲得讀取Gtkbuilder文件的結果,並將其粘貼到父窗口小部件中。

我正在使用Perl/Gtk2。

回答

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

如果需要,您也可以構建同一個窗口的多個副本。

+0

謝謝,我會試試看。 Perl的功能應該幾乎完全相同,我稱之爲可疑。 – aaa90210 2010-09-23 21:13:20

相關問題