Domanda

Ho un piccolo progetto che utilizza libglade e utilizzare la seguente per caricare il file XML:

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)

Dopo aver convertito il mio progetto in radura, quali cambiamenti strutturali devo fare? Sono su Ubuntu 9.04.

È stato utile?

Soluzione

È necessario utilizzare invece gtk.Builder. Questa classe può caricare qualsiasi numero di file di interfaccia utente, quindi è necessario aggiungere manualmente, sia come file o come stringhe:

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

Invece di get_widget, basta usare get_object sulla classe costruttore:

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

Per collegare i segnali, basta usare connect_signals, che prende anche un dizionario:

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

E 'usato per essere il caso (almeno in GTK + 2.12, non so se è ancora lo stesso) che si potrebbe chiamare connect_signals solo una volta, non potrà mai essere collegati tutti i segnali che non sono collegate durante la prima chiamata. Questo era diverso in radura, quindi fate attenzione se si è basata su tale funzione prima.

Altri suggerimenti

La risposta di Torsten è corretta, ma un po 'incompleta, così nello spirito di http://xkcd.com/979/ ecco la procedura da poco ho optato per dopo molti tentativi ed errori:

Apri yada.glade interfaccia Glade designer. Vai a Modifica-> progetto e modificare il tipo di progetto per GtkBuilder e assicurarsi che esso si rivolge l'ultima versione (2.24 al momento della stesura). Salvare il file, con la certezza che si salva in formato GtkBuilder, e cambiare il nome da yada.glade a yada.ui

Apri yada.py e modificare il seguente codice:

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

a:

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

Allo stesso modo cambiare tutte le istanze di self.wTree.get_widget(...) a self.wTree.get_object(...)

Cambia self.wTree.signal_autoconnect(dic) a self.wTree.connect_signals(dic)

Se il codice dipende il nome assegnato il widget nella finestra di progettazione dell'interfaccia, modificare widget.get_name() a gtk.Buildable.get_name(widget). widget.get_name() ora solo restituisce il tipo di widget. EDIT: È inoltre necessario modificare widget.set_name('my_widget') a gtk.Buildable.set_name(widget, 'my_widget')

.

Elimina import gtk.glade

Ho trovato numerosi segnali non utilizzati definiti nel file xml yada.ui, ho dovuto aprire il file xml e manualmente cancellarli per eliminare gli avvertimenti che hanno causato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top