我目前正在编写一个pyqt5应用程序,其中包含使用qmdiarea和mdisubwindows的几个小部件。 我有一个主子窗口,显示一个图像和几个与该主子窗口关联的小部件。 最终,我想摆脱所有辅助小部件。 虽然我收到警告消息,而不是错误,但我想摆脱此警告消息。
这是我创建子窗口的方式以及关闭它们的方式:
子窗口创建:
self.LUTobj = QMdiSubWindow()
self.DATAobj = QMdiSubWindow()
self.MEASUREobj = QMdiSubWindow()
self.REFERENCEobj = QMdiSubWindow()
self.SPATIALRESOLobj= QMdiSubWindow()
self.LINEPROFILEobj = QMdiSubWindow()
self.SNRobj = QMdiSubWindow()
self.CNRobj = QMdiSubWindow()
子窗口删除:
def closeSubwindowObject(self):
if self.LUTobj is not None:
self.mdiArea.removeSubWindow (self.LUTobj)
if self.DATAobj is not None:
self.mdiArea.removeSubWindow (self.DATAobj)
if self.MEASUREobj is not None:
self.mdiArea.removeSubWindow (self.MEASUREobj)
if self.REFERENCEobj is not None:
self.mdiArea.removeSubWindow (self.REFERENCEobj)
if self.SPATIALRESOLobj is not None:
self.mdiArea.removeSubWindow (self.SPATIALRESOLobj)
if self.LINEPROFILEobj is not None:
self.mdiArea.removeSubWindow (self.LINEPROFILEobj)
if self.SNRobj is not None:
self.mdiArea.removeSubWindow (self.SNRobj)
if self.CNRobj is not None:
self.mdiArea.removeSubWindow (self.CNRobj)
这是显示的警告消息:
QMdiArea::removeSubWindow:窗口不在工作区内
关于如何检查窗口是否在工作区内的任何线索?
警告消息指示您要删除已删除或从未属于 QMdiArea 的 QMdiSubWindow。因此,为了避免这些错误,您应该验证 QMdiSubWindow 是否在使用subWindowList()
方法添加的 QMdiSubWindows 列表中:
if self.LUTobj in self.mdiArea.subWindowList():
self.mdiArea.removeSubWindow(self.LUTobj)
如果要删除所有QMdiSubWindow,则只需遍历前面的列表:
for w in self.mdiArea.subWindowList():
self.mdiArea.removeSubWindow(w)
另一方面,如果要通过按"X"按钮将其删除,则可以启用Qt::WA_DeleteOnClose属性,该属性将通过通知QMdiArea将其从列表中删除来删除QMdiSubWindow
。sub_window.setAttribute(Qt.WA_DeleteOnClose)