2013-06-03 116 views
0

我有一個應用程序,它每分鐘顯示一個包含窗口小部件的窗口。如果我通過在窗口管理器(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),而不是我希望能夠通過窗口管理器關閉窗口,這樣我就不必添加額外的按鈕來關閉(隱藏)窗口。彈出窗口似乎沒有提供這個功能在我的窗口管理器(真棒)。

所以,如果你想在它的子節點被銷燬後重新顯示一個頂級窗口,怎麼做呢?

+0

您是否嘗試製作窗口類的另一個副本並顯示其中一個呢? – refi64

+0

@ kirbyfan64sos感謝您的想法。現在看起來如此明顯,但是當我發佈時,我看不到樹林。如果你關心提供這個答案,我會接受它。 – nomadicME

+0

不客氣!如果問題不多,你是否也可以提出答案? – refi64

回答

1

您是否嘗試製作 窗口類的另一個副本,並顯示一個 而不是?注意:這將重置在窗口中設置的任何內容。即如果一個人做了一些事情讓label1說'嗨!'而不是「你好!」,因爲你正在重新創建窗口,所以它將被重新設置爲「Hello!」。

0

您也可以將Gtk.Window.hide_on_delete設置爲delete-event信號的處理程序;然後關閉窗口將隱藏它而不是銷燬它。