1

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

所以我做了一些调查。我print self.window.get_children()在 show_all 命令之前执行,该命令返回一个空列表。所以我执行了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)代替,但我希望能够通过窗口管理器关闭窗口,这样我就不必添加额外的按钮来关闭(隐藏)窗口。弹出窗口似乎没有在我的窗口管理器中提供此功能(真棒)。

所以如果你想在它被销毁后重新显示一个顶层窗口及其子窗口,怎么做呢?

4

2 回答 2

2

您是否尝试过制作另一个窗口类的副本并显示那个?注意:这将重置在窗口中设置的任何内容。即,如果一个人做了某事让 label1 说“嗨!” 而不是“你好!”,它将再次重置为“你好!”,因为您正在重新创建窗口。

于 2013-06-04T02:34:32.760 回答
0

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

于 2013-06-05T06:50:03.457 回答