Quali sono i passi per convertire da utilizzare libglade a GtkBuilder? (Pitone)
-
09-09-2019 - |
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.
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.