2011-11-25 12 views
6

He estado tratando de obtener los "nombres" de todos los GtkWidgets en un objeto GtkBuilder.GtkBuilder y "nombres"

He logrado obtener todos los objetos del objeto constructor a través de gtk_builder_get_objects() y almacenarlos en una lista GSList.

Sin embargo, cuando uso gtk_widget_get_name() en gobjects (que lanzo a GtkWidgets), obtengo nombres genéricos como "GtkWindow" y "GtkButton" en lugar de "ventana1" o "botón1" que se muestran en glade.

Cualquier ayuda sería muy apreciado y haría que este programador muy feliz.

+0

Aquí está la misma pregunta para Python con la introspección GObject: http://stackoverflow.com/q/15393120/247696 – Flimm

Respuesta

3

Los nombres establecidos para el constructor no son los mismos que los del nombre GtkWidget. GtkBuilder mantiene una tabla hash interna que tiene el nombre establecido en GtkBuilder UI definitions desde el archivo o la cadena (desde la cual se agregó el constructor) y el objeto asociado. Se usa para recuperar los objetos cuando se llama al gtk_builder_get_object(). Utilice la propiedad "name" de GtkWidget. Establezca la propiedad "name" en el GtkBuilder UI definitions para establecer el nombre del GtkWidget que se puede recuperar utilizando gtk_widget_get_name().
Espero que esto ayude!

+0

Muchas gracias. Quiero decir esto, GRACIAS. Fuera de tema: la página de gtkbuilder no dice o enfatiza el hecho de que hay dos propiedades separadas de "nombre". ¿Sabes dónde puedo obtener mejor información sobre glade y gtkbuilder? – seininn

+1

@seininn: ¡De nada! Bueno, la página ['GTkBuilder'] (http://developer.gnome.org/gtk/2.24/GtkBuilder.html) nunca dice que el nombre es el conjunto de la propiedad del' GtkWidget' asociado. Dice que es el nombre asignado a ellos en la descripción de la interfaz de usuario. Por lo tanto, la propiedad '" nombre "' asociada con 'GtkWidget' no es la que está configurada, sino que es un identificador. Creo que lo has confundido :) ... Creo que las documentaciones en línea y los foros son los mejores recursos que se me ocurren para 'glade' &' GtkBuilder' –

4

Estoy haciendo exactamente lo mismo. Pude obtener las cadenas id= del archivo .glade usando gtk_buildable_get_name() según se especifica here.

Nota: Antes de 2.20, GtkBuilder estaba estableciendo la propiedad "nombre" de los widgets construidos en el atributo "id". En GTK + 2.20 o posterior, debe usar gtk_buildable_get_name() en lugar de gtk_widget_get_name() para obtener el "id" o establecer la propiedad "nombre" en la definición de su UI.

+0

Nota para aquellos que usan Perl: $ widget-> get_name() llamadas gtk_widget_get_name(). Para llamar a gtk_buildable_get_name(), use: $ name = Gtk3 :: Buildable :: get_name ($ widget) – TheAmigo