2009-04-14 7 views
5

Ich habe ein kleines Projekt, das libglade verwendet und verwenden Sie die folgende die XML-Datei zu laden:Welche Schritte müssen von libglade in GtkBuilder konvertiert werden? (Python)

self.gladefile = "sdm.glade" 
self.wTree = gtk.glade.XML(self.gladefile) 
self.window = self.wTree.get_widget("MainWindow") 
if (self.window): 
    self.window.connect("destroy", gtk.main_quit) 
dic = { "on_button1_clicked" : self.button1_clicked, 
     "on_MainWindow_destroy" : gtk.main_quit} 
self.wTree.signal_autoconnect(dic) 

Nach meinem Projekt in Lichtung Umwandlung, welche strukturellen Veränderungen muss ich machen? Ich bin auf Ubuntu 9.04.

Antwort

11

Sie müssen stattdessen gtk.Builder verwenden. Diese Klasse kann eine beliebige Anzahl von UI-Dateien laden, so müssen Sie sie manuell hinzufügen, entweder als Dateien oder als Strings:

self.uifile = "sdm.ui" 
self.wTree = gtk.Builder() 
self.wTree.add_from_file(self.uifile) 

Statt get_widget, nur get_object auf der Baumeister-Klasse verwenden:

self.window = self.wTree.get_object("MainWindow") 
if self.window: 
    self.window.connect("destroy", gtk.main_quit) 

die Signale zu verbinden, verwenden Sie einfach connect_signals, die auch ein Wörterbuch nimmt:

dic = { "on_button1_clicked" : self.button1_clicked, 
    "on_MainWindow_destroy" : gtk.main_quit} 
self.wTree.connect_signals(dic) 

Früher war es der Fall ist (zumindest in GTK + 2.12, nicht sicher, ob ich Es ist immer noch dasselbe, dass Sie connect_signals nur einmal aufrufen können, alle Signale, die während des ersten Aufrufs nicht verbunden sind, werden niemals verbunden. Das war anders in der Lichtung, also sei vorsichtig, wenn du dich vorher auf diese Funktion verlassen hast.

5

Torsten Antwort ist richtig, aber ein wenig unvollständig, so im Geiste der http://xkcd.com/979/ hier ist das Verfahren, ich vor kurzem nach viel Versuch und Irrtum ließ sich auf:

öffnen yada.glade in Glade Interface-Designer. Gehen Sie zu Bearbeiten-> Projekt und ändern Sie den Projekttyp in GtkBuilder und stellen Sie sicher, dass es auf die neueste Version abzielt (2.24 zum Zeitpunkt der Erstellung). Speichern Sie die Datei, sicher zu sein, dass es in GtkBuilder-Format speichert, und ändern Sie den Namen von yada.glade yada.ui

öffnen yada.py und ändern Sie den folgenden Code ein:

gladefile = relativize_filename(os.path.join("glade", "yada.glade")) 
self.wTree = gtk.glade.XML(gladefile, self.windowname) 

zu:

uifile = relativize_filename(os.path.join("glade", "yada.ui")) 
self.wTree = gtk.Builder() 
self.wTree.add_from_file(uifile) 

ändern Ähnlich alle Instanzen von self.wTree.get_widget(...) zu self.wTree.get_object(...)

ändern self.wTree.signal_autoconnect(dic)-self.wTree.connect_signals(dic)

Wenn Ihr Code vom Namen abhängt, dem das Widget im Schnittstellendesigner zugewiesen wurde, ändern Sie widget.get_name() in gtk.Buildable.get_name(widget). widget.get_name() gibt jetzt nur den Widget-Typ zurück. BEARBEITEN: Sie müssen auch widget.set_name('my_widget') zu gtk.Buildable.set_name(widget, 'my_widget') ändern.

löschen import gtk.glade

ich zahlreiche nicht genutzte Signale definiert in der yada.ui XML-Datei gefunden, hatte ich die XML-Datei zu öffnen und sie manuell die Warnungen sie zu eliminieren löschen.

Verwandte Themen