Frage

Ich habe ein kleines Projekt, das libglade verwendet und verwenden Sie die folgenden die XML-Datei zu laden:

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.

War es hilfreich?

Lösung

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 Builder-Klasse verwenden:

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

, um 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 (zumindest in GTK + 2.12, nicht sicher, ob es immer noch die gleiche ist) sein, die Sie connect_signals nur einmal nennen könnte, werden alle Signale, die nicht während des ersten Aufrufs verbunden sind nie angeschlossen werden. Das war anders in Lichtung, also seien Sie vorsichtig, wenn Sie auf diese Funktion verlassen vor.

Andere Tipps

Torsten Antwort ist richtig, aber ein wenig unvollständig, so im Geist der http://xkcd.com/979/ hier ist die Prozedur, die ich vor kurzem ließ sich auf nach viel Trial-and-error:

Öffnen yada.glade in Glade Interface-Designer. Zum Bearbeiten-> Projekt und ändern Sie den Projekttyp GtkBuilder und stellen Sie sicher, dass es die neueste Version (2.24 als dies geschrieben wurde) zum Ziel hat. 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)

Ebenso alle Instanzen self.wTree.get_widget(...) ändern self.wTree.get_object(...)

Ändern self.wTree.signal_autoconnect(dic) self.wTree.connect_signals(dic)

Wenn Ihr Code auf das das Widget in den Interface-Designern zugewiesenen Namen hängt, ändern widget.get_name() gtk.Buildable.get_name(widget). widget.get_name() jetzt gibt nur das Widget-Typ. EDIT: 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 löschen, die Warnungen zu beseitigen sie verursacht hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top