2010-12-05 5 views
4

私はgtk.notebookをオンザフライで埋めたいと思っています。ユーザーがファイルを開くたびに、新しいノートブックタブが生成されます。かなりストレートです。私の問題は、私はUIを構築するためにgladeを使い、ノートブックタブには子ウィジェットツリー(scrolledwindow-> viewport-> alignment-> frame)が必要であるということです。私のgladeファイルでは、テンプレートのノートブックタブがあります。これは複数回使いたいので、ツリー全体を普通のgtkでコーディングする必要はありません。 libgladeでは、pygtk faqで説明されているようにウィジェットツリーを再利用することができます:http://faq.pygtk.org/index.py?file=faq22.011.htp&req=show。どのようにGtkBuilderでこれを行うのですか?GtkBuilderでグライドファイルからウィジェットツリーを再利用するには?

事前のおかげで、

アーサー

+0

Builder.connectメソッドを複数回使用して管理しましたか(つまり、余分なウィジェットを追加した後でもう一度呼び出すのですか?)はいの場合、どのようにしましたか? – mac

答えて

1

はそれをGtkBuilderでこの方法を実行します。

builder = gtk.Builder() 
builder.add_from_file("GUI.xml") 
builder.connect_signals(self) 
self.window1 = builder.get_object("window1") 
self.window1.show() 

編集:

私が最初に間違っていた、それはgtkbuilderがインスタンス化をしているようです追加するオブジェクトだから、これを行うための理想的な方法は、文字列

builder.add_from_string(""" 
<interface> 
    <object class="GtkWindow" id="window1"> 
    <child> 
     <object class="GtkComboBox" id="combobox1"> 
     <property name="model">liststore1</property> 
     </object> 
    </child> 
    </object> 
</interface>""") 

self.window1 = builder.get_object("window1") 

を経由して、手動でウィジェットを追加することですうまくいけば、これは動作します!

+0

これはオブジェクト "window1"を1回追加するだけですが、別のオブジェクトや複数のオブジェクトを "window1"という名前でインスタンス化する必要があります – Fookatchu

+0

'self.window2 = builder.get_object(" window1 ")' ?私はあなたのために新しいオブジェクトをインスタンス化すると思った。私は家に帰るときにこれを試してみます:) –

+0

いいえ、doesnt仕事。私はそれを試み、同じオブジェクトを返します。 – Fookatchu

関連する問題