我有一個應用程序,它每分鐘顯示一個包含窗口小部件的窗口。如果我通過在窗口管理器(linux)中關閉窗口來銷燬此窗口,則會發送銷燬信號。然後下一分鐘四處滾動,此時self.window.show_all()
被執行,窗口彈出空。pyGTK如何在窗口銷燬信號發送後重新顯示頂層窗口(帶子窗口小部件)
所以我做了一些調查。我在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)
,而不是我希望能夠通過窗口管理器關閉窗口,這樣我就不必添加額外的按鈕來關閉(隱藏)窗口。彈出窗口似乎沒有提供這個功能在我的窗口管理器(真棒)。
所以,如果你想在它的子節點被銷燬後重新顯示一個頂級窗口,怎麼做呢?
您是否嘗試製作窗口類的另一個副本並顯示其中一個呢? – refi64
@ kirbyfan64sos感謝您的想法。現在看起來如此明顯,但是當我發佈時,我看不到樹林。如果你關心提供這個答案,我會接受它。 – nomadicME
不客氣!如果問題不多,你是否也可以提出答案? – refi64