У меня есть собственный виджет, и ему нужно запустить MessageDialog, и для того, чтобы я мог разместить это диалоговое окно с сообщениями над окном, в котором находится мой виджет, мне нужен доступ к родительскому gtk.window. Есть ли способ получить родительское окно GTK? Благодаря
Можете ли вы получить родительское окно 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));
надеюсь, что это поможет, считает