2010-09-23 25 views
2

J'utilise Glade-3 pour créer une suite d'applications Gtk. Les applications sont censées avoir un aspect commun, et nous avons décidé d'un "cadre" commun que toutes les applications partageront, qui comprend une barre de menu, une barre d'outils, une ou plusieurs barres d'état, un panneau vertical - et un espace au milieu qui sera rempli par chaque application.Puis-je charger une application gtkbuilder dans un cadre gtkbuilder "parent"?

Ce "cadre" commun est conçu à l'aide de Glade-3 et enregistré au format Gtkbuilder. Ce que je voudrais faire est de concevoir la "partie du milieu" pour chaque application en utilisant Glade-3, puis de le charger d'une manière ou d'une autre dans le cadre parent.

Est-ce possible? Cela ne me dérange pas de réécrire le cadre parent dans Gtk car il est assez simple - la viande principale sera dans les détails spécifiques à l'application que nous voulons absolument concevoir en utilisant Glade.

Je n'ai vu aucun moyen d'obtenir en quelque sorte le résultat de la lecture d'un fichier Gtkbuilder, et de le coller dans un widget parent.

J'utilise Perl/Gtk2.

Répondre

2

Vous pouvez faire tout cela en utilisant GtkBuilder. Par exemple, compte tenu de ces fichiers d'interface utilisateur:

<!-- 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> 

vous pouvez construire deux fenêtres en utilisant le code suivant (en Python, désolé, je ne suis pas familier avec les liaisons 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') 

Vous pouvez également créer plusieurs copies de la même fenêtre si vous le souhaitez.

+0

Merci, je vais essayer. Le Perl devrait être presque identique en termes de fonctions qui sont appelées je suspecte. – aaa90210