2010-12-05 6 views
4

ich möchte ein gtk.notebook on-the-fly füllen. Jedes Mal, wenn ein Benutzer eine Datei öffnet, wird eine neue Notizbuch-Registerkarte erstellt. ziemlich einfach. Mein Problem ist, dass ich eine Lichtung benutze, um das UI zu erstellen, und das Notizbuch-Tab sollte einen Kind-Widget-Baum haben (scrolledwindow-> viewport-> alignment-> frame). in meiner glade-datei habe ich eine vorlage, die ich mehrfach verwenden möchte, damit ich den ganzen baum nicht in gtk codieren muss. Mit libglade können Sie einen Widget-Baum wiederverwenden, wie in der pygtk-FAQ beschrieben: http://faq.pygtk.org/index.py?file=faq22.011.htp&req=show. Wie mache ich das mit GtkBuilder?Wie verwende ich einen Widget-Baum aus einer Glade-Datei mit GtkBuilder?

Vielen Dank im Voraus,

Arthur

+0

Haben Sie die Builder.connect-Methode mehr als einmal verwendet (z. B. nachdem Sie das zusätzliche Widget hinzugefügt haben)? Wenn ja, wie hast du es gemacht? – mac

Antwort

1

mit GtkBuilder es auf diese Weise Sie:

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

edit:

ich anfangs nicht in Ordnung war, scheint es, dass gtkbuilder instanziiert wird Objekte, wenn es hinzugefügt wird. Der ideale Weg, dies zu tun wäre, das Widget manuell über einen String hinzuzufügen.

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") 

Hoffentlich funktioniert das!

+0

Nun, dies fügt nur das Objekt "window1" einmal hinzu, aber ich muss ein oder mehrere Objekte mit dem Namen "window1" instanziieren – Fookatchu

+0

könnten Sie versuchen, 'self.window2 = builder.get_object (" window1 ")' ' ? Ich dachte, dass es ein neues Objekt für dich instanziiert. Ich werde das testen, wenn ich nach Hause komme :) –

+0

nein, funktioniert nicht. Ich habe das versucht und es gibt das gleiche Objekt zurück. – Fookatchu