2009-04-14 11 views
5

Tengo un pequeño proyecto que utiliza libglade y utilizar el siguiente para cargar el archivo XML:¿Cuáles son los pasos para convertir de usar libglade a GtkBuilder? (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) 

Después de convertir mi proyecto en el claro, ¿qué cambios estructurales Qué necesito hacer? Estoy en Ubuntu 9.04.

Respuesta

11

En su lugar, necesita usar gtk.Builder. Esta clase se puede cargar cualquier número de archivos de interfaz de usuario, por lo que necesita para añadirlos manualmente, ya sea como archivos o como cadenas:

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

En lugar de get_widget, sólo tiene que utilizar get_object en la clase constructor:

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

para conectar las señales, sólo tiene que utilizar connect_signals, que también tiene un diccionario:

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

lo que solía ser el caso (al menos en GTK + 2.12, no estoy seguro si me t sigue siendo el mismo) que puede llamar al connect_signals solo una vez, las señales que no están conectadas durante la primera invocación nunca se conectarán. Esto fue diferente en Glade, así que ten cuidado si confiaste en esa característica antes.

5

respuesta de Torsten es correcta, pero un poco incompleta, por lo que en el espíritu de http://xkcd.com/979/ aquí es el procedimiento recientemente que se establecieron en después de mucho ensayo y error:

yada.glade Abrir en Glade diseñador de la interfaz. Vaya a edit-> project y cambie el tipo de proyecto a GtkBuilder y asegúrese de que se dirija a la última versión (2.24 al momento de escribir esto). Guardar el archivo, asegurándose de que se guarda en formato GtkBuilder, y cambiar el nombre de yada.glade a yada.ui

yada.py Abrir y cambie el código siguiente:

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) 

cambiar del mismo modo todas las instancias de self.wTree.get_widget(...) a self.wTree.get_object(...)

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

Si su código depende del nombre asignado al widget en el diseñador de interfaz, cambie widget.get_name() a gtk.Buildable.get_name(widget). widget.get_name() ahora solo devuelve el tipo de widget. EDITAR: También necesita cambiar widget.set_name('my_widget') a gtk.Buildable.set_name(widget, 'my_widget').

Eliminar import gtk.glade

he encontrado numerosas señales no utilizados se definen en el archivo XML yada.ui, tuve que abrir el archivo XML y eliminarlos manualmente para eliminar las advertencias que causaron.

Cuestiones relacionadas