Puis-je charger une application GtkBuilder dans un cadre GtkBuilder « parent »?

StackOverflow https://stackoverflow.com/questions/3774675

  •  04-10-2019
  •  | 
  •  

Question

J'utilise Glade-3 pour construire une suite d'applications Gtk.

Les applications sont censées avoir une apparence commune à sensation, et nous avons décidé d'un « cadre » commun que toutes les applications partageront, qui comprend une barre de menus, barre d'outils, barre d'état (s), verticale panneau -. et un espace au milieu qui sera rempli par chaque application

Ce "cadre" commun est conçu en utilisant Glade-3 et enregistré au format GtkBuilder.

Ce que je voudrais faire est la conception de la « partie centrale » pour chaque application à l'aide de puits Glade-3, puis en quelque sorte le charger dans le cadre parent.

Une telle chose est possible? Je 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 de l'application que nous voulons certainement concevoir l'aide Glade

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

J'utilise Perl / Gtk2.

Était-ce utile?

La solution

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 voulez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top