Можете ли вы получить родительское окно GTK из виджета?

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

Ответ 1

Документы 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() следует назвать чем-то другим).

Ответ 2

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

Ответ 3

Хотя 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));

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