Kann ich eine gtkbuilder App in einen „Eltern“ gtkbuilder Rahmen laden?
-
04-10-2019 - |
Frage
Ich bin mit Glade-3 eine Reihe von Gtk-Anwendungen erstellen.
Die Anwendungen sollen einen gemeinsamen Look-and-Feel haben, und wir haben auf einer gemeinsamen „Rahmen“ entschieden, dass alle Apps teilen, die eine Menüleiste enthält, Symbolleiste, Statusleiste (n), eine vertikale Panel -. und ein Raum in der Mitte, die von jeder Anwendung ausgefüllt werden
Dieser gemeinsame "Rahmen" ist so konzipiert, mit Glade-3 und in Gtkbuilder-Format gespeichert.
Was würde Ich mag tun Design der „Mittelteil“ für jede Anwendung unter Verwendung von Glade-3 als-gut, dann laden irgendwie in den übergeordneten Frame.
Ist so etwas möglich? Ich kümmere mich nicht den übergeordneten Rahmen in Gtk Umschreiben, wie es ist ziemlich einfach -. Das wichtigste Fleisch in den anwendungsspezifischen Details sein, dass wir auf jeden Fall Glade entwerfen wollen mit
Ich habe keine Möglichkeit gesehen, um irgendwie das Ergebnis zu erhalten, eine Gtkbuilder Datei zu lesen, und es in eine übergeordneten Widget kleben.
Ich bin mit Perl / Gtk2.
Lösung
Sie können all das mit GtkBuilder tun. Zum Beispiel dieser UI-Dateien gegeben:
<!-- 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>
Sie können zwei Fenster bauen mit dem folgenden Code (in Python, sorry, ich bin nicht vertraut mit den Perl-Bindungen).
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')
Sie können auch mehrere Kopien des gleichen Fenster bauen, wenn Sie wollen.