问题很简单,我们覆盖了一个属性,并且在那一刻删除了先前的元素,因此仅删除了一个窗口。正如您所指出的,解决方案是将其存储在列表中。
但是在此之前,我建议您不要在Qt
Designer生成的.py中编写逻辑,因为例如,假设您要修改设计的某些内容,那么在生成新的.py时,它将删除所有逻辑。PyQt建议使用创建另一个文件,在其中生成带有消息的逻辑副词# WARNING! All changes made in this file will be lost!
。因此,通过删除openNewBook还原我称为bookPopup.py和mainmenu.py的先前文件。根据docs的建议,我们获得以下信息:
main.py
from PyQt5 import QtCore, QtGui, QtWidgetsimport bookPopoutimport mainmenuclass BookPopoutWindow(QtWidgets.QMainWindow, bookPopout.BookPopout): def __init__(self, parent=None): super(BookPopoutWindow, self).__init__(parent) self.setupUi(self)class MainMenu(QtWidgets.QMainWindow, mainmenu.Ui_MainWindow): def __init__(self, parent=None): super(MainMenu, self).__init__(parent) self.setupUi(self) self.createNewBookButton.clicked.connect(self.openNewBook) self.popups = [] @QtCore.pyqtSlot() def openNewBook(self): popWin = BookPopoutWindow() popWin.show() self.popups.append(popWin)if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) w = MainMenu() w.show() sys.exit(app.exec_())



