Posso caricare un'applicazione GtkBuilder in un “genitore” frame GtkBuilder?
-
04-10-2019 - |
Domanda
Sto usando Glade-3 per costruire una suite di applicazioni Gtk.
Le applicazioni si suppone di avere un comune look-and-feel, e abbiamo deciso un "frame" comune che tutte le applicazioni condivideranno, che include una barra dei menu, barra degli strumenti, barra di stato (s), verticale pannello -. e uno spazio nel mezzo che sarà riempito da ogni applicazione
Questa "frame" comune è progettato utilizzando Glade-3 e salvato in formato GtkBuilder.
Quello che vorrei fare è progettare la "parte centrale" per ogni applicazione utilizzando Glade-3 come-bene, poi in qualche modo caricarlo nel frame principale.
E 'una cosa possibile? Non mi importa di riscrivere il frame principale in Gtk come è abbastanza semplice -. La carne principale sarà nei dettagli dell'applicazione specifici che abbiamo sicuramente vogliamo progettare utilizzando Glade
ho visto alcun modo per ottenere in qualche modo il risultato di lettura di un file GtkBuilder, e si conficca in un widget genitore.
sto usando Perl / Gtk2.
Soluzione
Si può fare tutto questo utilizzando GtkBuilder. Ad esempio, dato questi file 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>
è possibile costruire due finestre utilizzando il seguente codice (in Python, mi dispiace, io non sono a conoscenza degli attacchi 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')
Si può anche costruire più copie della stessa finestra, se si desidera.