PYQT5 mdiarea 如何检查子窗口是否在工作区内



我目前正在编写一个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)

相关内容

  • 没有找到相关文章

最新更新