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