没有临时父级的 GtkDialog 映射
Posted
技术标签:
【中文标题】没有临时父级的 GtkDialog 映射【英文标题】:GtkDialog mapped without a transient parent 【发布时间】:2015-07-05 03:59:44 【问题描述】:我有一个内置在 Glade (3.18) 中的 GUI,它由 Python 3 程序调用(使用 PyGObject)。运行程序(Fedora 21)时我收到很多警告:
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
如何解决此警告?我尝试在 Glade 中为所有对话窗口填写字段 Transient for: main_window
,但仍然出现警告。
【问题讨论】:
这正是我从官方 gtkmm 文档运行此示例时最终得到的警告:developer.gnome.org/gtkmm-tutorial/stable/… 【参考方案1】:你可以通过给 GtkDialog 一个父级来修复这个警告。相关函数是gtk_window_set_transient_for()
(将这个窗口设置为始终在另一个窗口之上,或瞬态)和可选的gtk_window_set_modal()
,使其成为模式对话框。这最终是各种 GtkDialog 构造函数所做的。
【讨论】:
这是否意味着我需要将main_window
实例传递给每个对话框类?如果我改为在对话框中使用self.builder.add_objects_from_file(..."main_window")
,则会出现错误,因为main_window
信号未连接(这当然是正确的,因为对话框的信号与主窗口不同)。由于类似的原因,Glade 中的设置可能会失败。已设置瞬态选项,但在运行时,对话框无权访问 main_window
实例。
当你显示你的对话时,你有什么理由不能打电话给set_transient_for()
?这就是“映射”部分的意思
我可能犯了一个愚蠢的错误,但是在链接行下方插入任何这些变体都无助于错误消息:github.com/tobias47n9e/innstereo/blob/master/innstereo/…
我刚刚又试了一次,如果我将 main_window 对象(GtkWindow)传递给每个对话框然后使用self.dialog.set_transient_for(main_window)
(为此我使用了__init__
函数),它确实有效。再次感谢您的帮助!
我的应用程序只有对话框,没有“主窗口”。我应该将什么传递给这个函数?【参考方案2】:
使用 GtkWindow 代替;并且只有在有父窗口/对话框时才使用 GtkDialog。
【讨论】:
以上是关于没有临时父级的 GtkDialog 映射的主要内容,如果未能解决你的问题,请参考以下文章