pyGTK如何在发送窗口销毁信号后重新显示顶级窗口(带子窗口小部件)

时间:2013-06-03 19:44:32

标签: pygtk

我有一个应用程序,每分钟显示一个包含小部件的窗口。如果我通过在窗口管理器(linux)中关闭它来销毁此窗口,则会发送销毁信号。然后下一分钟滚动,此时执行self.window.show_all()并且窗口弹出为空。

所以我做了一些调查。我在show_all命令之前执行了print self.window.get_children(),它返回了一个空列表。所以我执行了self.vbox.reparent(self.window)并得到了回复:

calendar.py:237: GtkWarning: IA__gtk_widget_reparent: assertion `widget->parent != NULL' failed

self.vbox.reparent(self.window)

这两种反应似乎相互矛盾。一方面,print self.window.get_children()返回的空列表似乎暗示窗口没有任何子节点。另一方面,self.vbox.reparent(self.window)返回的输出似乎意味着self.vbox仍然有一个父,即self.window(如前所述)

我尝试使用弹出窗口:self.window = gtk.Window(gtk.WINDOW_POPUP),但我希望能够通过窗口管理器关闭窗口,这样我就不必添加额外的按钮来关闭(隐藏)窗口。弹出窗口似乎没有在我的窗口管理器中提供此功能(太棒了)。

因此,如果您希望在销毁子窗口后重新显示顶级窗口,该怎么办呢?

2 个答案:

答案 0 :(得分:2)

你有没有试过制作另一份副本 窗口类并显示一个 代替?注意:这将重置窗口中设置的所有内容。也就是说如果一个人做了什么事来制作label1说“嗨!”而不是'Hello!',它将再次重置为'Hello!',因为您正在重新创建窗口。

答案 1 :(得分:0)

您还可以将Gtk.Window.hide_on_delete设置为delete-event信号的处理程序;然后关闭窗口将隐藏它而不是破坏它。