2011-02-23 11 views

risposta

8

La documentazione GTK suggeriscono:

GtkWidget *toplevel = gtk_widget_get_toplevel (widget); 
    if (gtk_widget_is_toplevel (toplevel)) 
    { 
     /* Perform action on toplevel. */ 
    } 

get_toplevel tornerà il widget più in alto sei dentro, anche se non si tratta di una finestra, quindi il controllo is_toplevel. Sì, qualcosa è errato perché il codice sopra fa un "get_toplevel()" quindi un immediato "is_toplevel()" (molto probabilmente, get_toplevel() dovrebbe essere chiamato qualcos'altro).

2

Anche se gtk_widget_get_toplevel dovrebbe funzionare, puoi anche provare il codice qui sotto. Dovrebbe ottenere la finestra genitore gtk per il widget dato e stamparne il titolo.

GdkWindow *gtk_window = gtk_widget_get_parent_window(widget); 
GtkWindow *parent = NULL; 
gdk_window_get_user_data(gtk_window, (gpointer *)&parent); 
g_print("%s\n", gtk_window_get_title(parent)); 

speranza che questo aiuti, riguarda

+2

Questo richiede una deviazione inutile attraverso di basso livello GDK gunge - meglio stare con il livello GTK. Qui è necessario realizzare il widget e probabilmente avrà problemi in GTK 3. –

+0

"sebbene il metodo consigliato dovrebbe funzionare, si potrebbe anche provare questa alternativa inutilmente complessa senza alcun motivo visibile" ... o ce n'è uno .. .? –

5

In pygtk, è possibile ottenere il livello superiore come toplevel = mywidget.get_toplevel() poi alimentano toplevel direttamente al gtk.MessageDialog()

Problemi correlati