Ho un widget personalizzato e deve avviare un MessageDialog e per farmi mettere la finestra di dialogo del messaggio sopra la finestra in cui si trova il mio widget, ho bisogno di accedere alla gen gtk.window. C'è un modo per ottenere la finestra genitore GTK? GrazieÈ possibile ottenere la finestra GTK principale da un widget?
10
A
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
5
In pygtk, è possibile ottenere il livello superiore come toplevel = mywidget.get_toplevel()
poi alimentano toplevel
direttamente al gtk.MessageDialog()
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. –
"sebbene il metodo consigliato dovrebbe funzionare, si potrebbe anche provare questa alternativa inutilmente complessa senza alcun motivo visibile" ... o ce n'è uno .. .? –