2011-02-23 28 views
10

Tengo un widget personalizado y necesita iniciar un MessageDialog y para poder colocar el cuadro de diálogo de ese mensaje en la parte superior de la ventana en la que está mi widget, entonces necesito acceder al parent gtk.window. ¿Hay alguna manera de obtener la ventana padre GTK? Gracias¿Puedes obtener la ventana padre GTK desde un widget?

Respuesta

8

Los documentos sugieren GTK:

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

get_toplevel devolverá el widget más alta que estás dentro, si es o no es una ventana, por lo que el cheque is_toplevel. Sí, algo se llama mal, ya que el código anterior tiene un "get_toplevel()" y luego un "is_toplevel()" inmediato (lo más probable es que get_toplevel() se llame algo diferente).

2

Aunque gtk_widget_get_toplevel debería funcionar, también puedes intentar con el siguiente código. Debería obtener la ventana parent gtk para el widget dado e imprimir su título.

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)); 

esperanza que esta ayuda, que se refiere a

+2

Esto toma un desvío innecesario a través de bajo nivel mugre GDK - mejor quedarse con la capa GTK. Aquí requiere que el widget se realice, y probablemente tenga problemas en GTK 3. –

+0

"aunque el método recomendado debería funcionar, también puede probar esta alternativa innecesariamente compleja sin motivo aparente" ... o hay una ... .? –

5

En pygtk, se puede obtener el nivel superior como toplevel = mywidget.get_toplevel() luego alimentar toplevel directamente a gtk.MessageDialog()

Cuestiones relacionadas