Можете ли вы получить родительское окно GTK из виджета? - PullRequest
10 голосов
/ 24 февраля 2011

У меня есть собственный виджет, и он должен запустить MessageDialog, и для того, чтобы я поместил этот диалог сообщений поверх окна, в котором находится мой виджет, мне нужен доступ к родительскому gtk.window. Есть ли способ получить родительское окно GTK? Спасибо

Ответы [ 3 ]

9 голосов
/ 24 февраля 2011

Документы GTK предлагают:

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

get_toplevel вернет самый верхний виджет, внутри которого вы находитесь, независимо от того, является ли это окном, то есть проверка is_toplevel. Да, что-то неправильно названо, поскольку приведенный выше код выполняет get_toplevel (), а затем немедленный is_toplevel () (скорее всего, get_toplevel () должен называться как-то иначе).

7 голосов
/ 22 февраля 2013

В pygtk вы можете получить верхний уровень как toplevel = mywidget.get_toplevel(), а затем подать toplevel непосредственно на gtk.MessageDialog()

2 голосов
/ 24 февраля 2011

Хотя gtk_widget_get_toplevel должна работать, вы также можете попробовать код ниже.Он должен получить родительское окно gtk для данного виджета и напечатать его заголовок.

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

надеюсь, это поможет, с уважением

...