GTKBuilderアプリを「親」GTKBUILDERフレームにロードできますか?
-
04-10-2019 - |
質問
Glade-3を使用して、一連のGTKアプリケーションを構築しています。
アプリケーションには一般的なルックアンドフィールがあるはずです。メニューバー、ツールバー、ステータスバー、垂直パネルなど、すべてのアプリが共有する共通の「フレーム」を決定しました。各アプリケーションによって記入される中央のスペース。
この共通の「フレーム」は、Glade-3を使用して設計され、GTKBuilder形式で保存されます。
私がやりたいのは、Glade-3を使用して各アプリケーションの「中央部分」を設計し、どういうわけか親フレームにロードすることです。
そのようなことは可能ですか? GTKの親フレームを書き換えてもかなりシンプルです。メインの肉は、グレードを使用して間違いなく設計したいアプリケーション固有の詳細にあります。
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>
次のコードを使用して2つのウィンドウを構築できます(Pythonでは、申し訳ありませんが、Perl Bindingsに精通していません)。
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