在16.04下运行zenity时出现错误消息:Gtk-Message:没有临时父级映射的GtkDialog。 这是不鼓励的
在ubuntu 16.04下,我收到以下消息
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged
当我用命令打开zenity时
zenity --text-info --filename=
这不是在14.04下发生的。 我认为答案与这篇文章有关,但该post没有解释如何实施提议的解决方案。 有人可以解释我应该添加建议行的文件吗?
您可以通过为GtkDialog提供父模式来修复此警告。 相关函数是gtk_window_set_transient_for()(它将此窗口设置为始终位于另一个窗口的顶部或瞬态),并可选择gtk_window_set_modal()以使其成为modal dialog。 这最终是各种GtkDialog构造函数的作用。
忽略它。
这是一个警告 ,而不是错误。 该应用程序可行,它似乎没有考虑到最佳实践。 您必须修改zenity
的源代码才能实现链接问题中描述的修复,然后自己编译,但是……无论如何都要工作,那你为什么要打扰呢?
如果你只想摆脱终端中的输出,你可以简单地将STDERR(标准错误流,即警告打印到的地方)重定向到/dev/null
(吞下数据的虚拟字符设备),方法是附加2> /dev/null
到命令的末尾,如下所示:
zenity --text-info --filename= 2> /dev/null
zenity ... 2>/dev/null
适合我。 我看到的唯一问题是其他(重要)错误消息也将被抑制,因此在代码中以某种方式更好地构建错误捕获
似乎Gtk开发人员决定添加此警告,这会影响许多软件包。 我们只需要等待Zenity开发人员赶上并修复Zenity。
使用bash shell(这不符合Posix),在允许其他消息通过stderr的同时抑制特定错误消息相对简单:
zenity --info --text "hello" 2> >(grep -v 'GtkDialog' >&2)
这不会干扰stdout,因此可以正常使用管道或用于命令替换:
echo message: $(zenity --entry 2> >(grep -v 'GtkDialog' >&2) )