我有一个自定义小部件,它需要启动一个MessageDialog,为了让我将该消息对话框置于我的小部件所在的窗口之上,我需要访问父gtk.window。有没有办法获得父GTK窗口?感谢
答案 0 :(得分:9)
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()应该调用其他内容),有些内容被错误命名。
答案 1 :(得分:7)
在pygtk中,您可以获得像toplevel = mywidget.get_toplevel()
这样的顶层,然后直接将toplevel
提供给gtk.MessageDialog()
答案 2 :(得分:2)
虽然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));
希望这有帮助,尊重