2015-12-08 38 views
0

我有一個帶有QMainWindow的PyQt4應用程序。從該程序中,我啓動另一個用於繪製matplotlib圖的QMainWindow。我的方法基於將matplotlib與PyQt集成的Eli Benderskys way使第二個PyQt4 QMainWindow從主應用程序「可拆卸」

class QtMatplotlibWindow(QtGui.QMainWindow): 
"""Plot window to display data, is created by main application""" 

def __init__(self, parent=None): 
    QtGui.QMainWindow.__init__(self, parent) 

如果我實例QtMatplotlibWindowparent=None出現的窗口將完全「獨立」的,這意味着它有它自己的圖標在任務欄上,是從主應用程序完全「分離」。因此,例如,我可以將另一個應用程序(比如說Internet Explorer)帶到前臺,然後將Matplotlib窗口僅帶到前臺,實際應用程序停留在後臺。然而,使用parent=None結果將matplotlib窗口從堆棧中拋出並關閉,但我不願意在某個看似隨機的時間點這樣做。

另一方面,如果我將主應用程序的實例作爲父項傳遞,則兩個窗口「綁在一起」,這意味着我無法獨立地查看它們。

我該如何實現「兩全其美」?我想將主應用程序的實例作爲父項傳遞,以便只有在關閉主應用程序時纔會關閉生成的圖塊,但是我還希望繪圖窗口在顯示和移動時完全獨立。我期望QMainWindow的某些屬性可以完全實現這一點。我希望我能夠清楚地說出我的問題,我覺得我缺乏適當的術語。

+2

您的第二個窗口在隨機時間消失的事實表明它已被垃圾收集。你必須保持對所有窗口的Python引用。例如,將您新創建的窗口附加到您的應用程序的某個列表中:'windowlist.append(QtMatplotlibWindow())' – titusjan

+0

謝謝,這似乎是我正在尋找的。你會考慮將你的評論轉換成答案,以便我可以接受它。 – stebu92

回答

1

您的第二個窗口隨機消失的事實表明它已被垃圾收集。你必須保持對所有窗口的Python引用。例如,將您新創建的窗口追加到您應用程序中的列表:windowlist.append(QtMatplotlibWindow())

相關問題