【发布时间】:2020-12-18 12:11:57
【问题描述】:
在下面的示例中,我从主窗口打开新的子窗口。对于每个新窗口,我在列表中添加对它的引用以跟踪所有新窗口(我的整个软件中有很多)。 我的问题是,当我打开了几个窗口并关闭了其中一些窗口时,对这些关闭窗口的引用仍然出现在列表中:
1 window open
[<__main__.window object at 0x000002B91B7D1798>]
2 windows open
[<__main__.window object at 0x000002B91B7D1798>, <__main__.window object at 0x000002B91B7D19D8>]
3 windows open
[<__main__.window object at 0x000002B91B7D1798>, <__main__.window object at 0x000002B91B7D19D8>, <__main__.window object at 0x000002B91B7D1C18>]
4 windows open
[<__main__.window object at 0x000002B91B7D1798>, <__main__.window object at 0x000002B91B7D19D8>, <__main__.window object at 0x000002B91B7D1C18>, <__main__.window object at 0x000002B91B7D1E58>]
hereI closed the first two windows, so 3 windows are opened, but I still have :
[<__main__.window object at 0x000002B91B7D1798>, <__main__.window object at 0x000002B91B7D19D8>, <__main__.window object at 0x000002B91B7D1C18>, <__main__.window object at 0x000002B91B7D1E58>, <__main__.window object at 0x000002B91B8640D8>]
我怎样才能真正关闭子窗口并且在我的列表中没有它们的引用?否则,它们显然不会关闭。
这里是 MRE
from PyQt5.QtWidgets import *
import sys
class window(QMainWindow):
def __init__(self, parent=None ):
super(window, self).__init__()
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.HBOX = QVBoxLayout()
self.PB = QPushButton('open new window')
self.PB.clicked.connect(self.new_window)
self.HBOX.addWidget(self.PB)
self.centralWidget.setLayout(self.HBOX)
self.windows_list = []
def new_window(self):
self.windows_list.append(window(self))
self.windows_list[-1].show()
print(self.windows_list)
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = window()
ex.show()
sys.exit(app.exec_())
【问题讨论】: