在 ubuntu 16.04 下,我收到以下消息
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged
当我用命令打开 zenity
zenity --text-info --filename=<filename>
这在 14.04 下没有发生。我认为答案与这篇文章有关,但这篇文章没有解释如何实施建议的解决方案。有人可以解释一下我应该将建议的行添加到哪个文件吗?
您可以通过为 GtkDialog 提供一个作为模态的父级来修复此警告。相关函数是 gtk_window_set_transient_for() (将这个窗口设置为始终位于另一个窗口的顶部或瞬态)和可选的 gtk_window_set_modal() 以使其成为模式对话框。这最终是各种 GtkDialog 构造函数所做的。
忽略它。
这是一个警告,而不是错误。该应用程序可以正常工作,只是似乎没有考虑最佳实践进行编码。您必须修改
zenity
的源代码以实现链接问题中描述的修复程序,然后自己编译它,但是......它仍然有效,那么您为什么要打扰?如果您只是想摆脱终端中的输出,您可以通过附加到命令的末尾简单地将 STDERR(标准错误流,这是打印警告的地方)重定向到
/dev/null
(吞下数据的虚拟字符设备) ,2> /dev/null
像这样:似乎 Gtk 开发人员决定添加这个影响许多软件包的警告。我们只需要等待 Zenity 开发人员赶上并修复 Zenity。
使用bash shell(这不符合 Posix),在允许其他消息通过 stderr 的同时抑制特定错误消息相对简单:
这不会干扰标准输出,因此可以正常使用管道或在命令替换中使用:
zenity ... 2>/dev/null
为我工作。我看到的唯一问题是其他(重要)错误消息也将被抑制,因此更好地在您的代码中构建错误捕获基于 Dave Rove 的回答,如果你有很多提示,你可以通过创建一个函数来清理它,比如
然后像这样使用它:
当与其他逻辑结合时,这使得事情更容易阅读: