2011-11-25 12 views
6

Ho cercato di ottenere i "nomi" di tutti i GtkWidgets in un oggetto GtkBuilder.GtkBuilder e "nomi"

Sono riuscito a richiamare tutti gli oggetti dall'oggetto builder tramite gtk_builder_get_objects() e memorizzarli in una GSList.

Tuttavia, quando uso gtk_widget_get_name() sui gobjects (che ho lanciato a GtkWidgets), ottengo nomi generici quali "GtkWindow" e "GtkButton" invece di "window1" o "button1" che vengono visualizzati nella radura.

Qualsiasi aiuto sarebbe estremamente apprezzato e renderebbe questo programmatore molto felice.

+0

Ecco la stessa domanda per Python con introspezione GObject: http://stackoverflow.com/q/15393120/247696 – Flimm

risposta

3

I nomi impostati per il builder non corrispondono al nome di GtkWidget. GtkBuilder mantiene una tabella hash interna che ha il nome impostato in GtkBuilder UI definitions dal file o dalla stringa (da cui è stato aggiunto il builder) e dall'oggetto associato. Viene utilizzato per recuperare gli oggetti quando viene chiamato gtk_builder_get_object(). Utilizzare la proprietà "name" di GtkWidget. Impostare "name" proprietà nello GtkBuilder UI definitions per impostare il nome dello GtkWidget che può essere recuperato utilizzando gtk_widget_get_name().
Spero che questo aiuti!

+0

Grazie mille. Intendo questo, GRAZIE. Off-topic: la pagina gtkbuilder non ha detto o enfatizzato sul fatto che ci sono due proprietà "nome" separate. Sai dove posso ottenere informazioni migliori su glade e gtkbuilder? – seininn

+1

@seininn: siete i benvenuti! Bene [Pagina 'GTkBuilder'] (http://developer.gnome.org/gtk/2.24/GtkBuilder.html) non dice mai che il nome è l'insieme è la proprietà del' GtkWidget 'associato. Dice che è il nome assegnato a loro nella descrizione dell'interfaccia utente. Quindi la proprietà '" nome "' associata a 'GtkWidget' non è quella che viene impostata ma è un identificatore. Penso che tu ti sia confuso :) ... Penso che le documentazioni e i forum online siano le migliori risorse che io possa pensare per 'glade' e' GtkBuilder' –

4

Sto facendo esattamente la stessa cosa. Sono stato in grado di ottenere le stringhe id= dal file .glade utilizzando gtk_buildable_get_name() come specificato here.

: prima di 2.20, GtkBuilder stava impostando la proprietà "nome" dei widget costruiti sull'attributo "id". In GTK + 2.20 o più recente, devi utilizzare gtk_buildable_get_name() anziché gtk_widget_get_name() per ottenere "id" o impostare la proprietà "nome" nella definizione dell'interfaccia utente.

+0

Nota per quelli che usano Perl: $ widget-> get_name() chiama gtk_widget_get_name(). Per chiamare gtk_buildable_get_name(), utilizzare: $ name = Gtk3 :: Buildable :: get_name ($ widget) – TheAmigo