我有一个应用程序,每分钟显示一个包含小部件的窗口。如果我通过在窗口管理器(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)
,但我希望能够通过窗口管理器关闭窗口,这样我就不必添加额外的按钮来关闭(隐藏)窗口。弹出窗口似乎没有在我的窗口管理器中提供此功能(太棒了)。
因此,如果您希望在销毁子窗口后重新显示顶级窗口,该怎么办呢?
答案 0 :(得分:2)
你有没有试过制作另一份副本 窗口类并显示一个 代替?注意:这将重置窗口中设置的所有内容。也就是说如果一个人做了什么事来制作label1说“嗨!”而不是'Hello!',它将再次重置为'Hello!',因为您正在重新创建窗口。
答案 1 :(得分:0)
您还可以将Gtk.Window.hide_on_delete
设置为delete-event
信号的处理程序;然后关闭窗口将隐藏它而不是破坏它。