2010-12-05 48 views
4

Je veux remplir un gtk.notebook à la volée. Chaque fois qu'un utilisateur ouvre un fichier, un nouvel onglet de carnet est généré. assez simple. mon problème est, que j'utilise glade pour construire l'interface utilisateur et l'onglet portable devrait avoir un arbre de widget enfant (scrolledwindow-> viewport-> alignement-> cadre). dans mon fichier glade, j'ai un onglet de cahier de modèle, que je veux utiliser plusieurs fois, de sorte que je n'ai pas à coder l'arbre entier en gtk simple. avec libglade, vous pouvez réutiliser un arbre de widget comme expliqué dans la FAQ de pygtk: http://faq.pygtk.org/index.py?file=faq22.011.htp&req=show. Comment est-ce que je fais ceci avec GtkBuilder?Comment réutiliser un arbre de widget à partir d'un fichier Glade avec GtkBuilder?

merci à l'avance,

Arthur

+0

Avez-vous par hasard réussi à utiliser la méthode Builder.connect plus d'une fois (c'est-à-dire en l'appelant de nouveau après avoir ajouté le widget supplémentaire)? Si oui, comment l'avez-vous fait? – mac

Répondre

1

Ne cette façon avec GtkBuilder:

builder = gtk.Builder() 
builder.add_from_file("GUI.xml") 
builder.connect_signals(self) 
self.window1 = builder.get_object("window1") 
self.window1.show() 

modifier:

J'étais d'abord mal, il semble que GtkBuilder n'instancier objets quand il ajoute. Donc, le moyen idéal pour ce faire serait d'ajouter le widget manuellement par l'intermédiaire d'une chaîne

builder.add_from_string(""" 
<interface> 
    <object class="GtkWindow" id="window1"> 
    <child> 
     <object class="GtkComboBox" id="combobox1"> 
     <property name="model">liststore1</property> 
     </object> 
    </child> 
    </object> 
</interface>""") 

self.window1 = builder.get_object("window1") 

Espérons que cela fonctionne!

+0

bien, ceci ajoute seulement l'objet "window1" une fois, mais j'ai besoin d'instancier un autre ou plusieurs objet (s) avec le nom "window1" – Fookatchu

+0

pourriez-vous essayer de faire 'self.window2 = builder.get_object (" window1 ")' ? Je pensais que cela instancie un nouvel objet pour vous. Je vais tester cela quand je rentre à la maison :) –

+0

non, ne fonctionne pas. J'ai essayé ça et ça retourne le même objet. – Fookatchu