从主窗口派生的窗口在关闭时未完全关闭

2024-10-03 15:23:22 发布

您现在位置:Python中文网/ 问答频道 /正文

当我按下一个主窗口按钮时,会创建一个主窗口。我有两个问题发生,但现在我将集中在第一个问题上:当我关闭旧窗口时,我无法让它完全关闭它。它在视觉上关闭它,但窗口仍在后台运行。为了说明这一点,我放了一个计数器。下面是说明此问题的通用代码。在

这是我的对话窗口:

from PyQt5 import QtCore, QtGui, QtWidgets
from form_test import Ui_Form

class formTest(QtWidgets.QWidget, Ui_Form):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        flags = QtCore.Qt.Drawer | QtCore.Qt.WindowStaysOnTopHint 
        self.setWindowFlags(flags)
        self.setupUi(self) 

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(507, 305)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.btnOpenForm = QtWidgets.QPushButton(self.centralwidget)
        self.btnOpenForm.setGeometry(QtCore.QRect(170, 30, 93, 28))
        self.btnCloseForm = QtWidgets.QPushButton(self.centralwidget)
        self.btnCloseForm.setGeometry(QtCore.QRect(170, 160, 93, 28))
        MainWindow.setCentralWidget(self.centralwidget)

        self.btnOpenForm.clicked.connect(self.openClicked)
        self.btnCloseForm.clicked.connect(self.closeClicked)


        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.btnOpenForm.setText(_translate("MainWindow", "Open Form"))
        self.btnCloseForm.setText(_translate("MainWindow", "Close Form"))

    def openClicked(self):
        print('open')
        self.popForm = formTest()
        self.popForm.show()

    def closeClicked(self):
        print('close')
        self.popForm.close()


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

这是我的衍生windows代码(表单_测试.py)公司名称:

^{pr2}$

当我关闭第二个窗口时,它仍在内存中运行。当我再次尝试打开它时,另一个开始运行,然后我有两个运行。有没有一个不同的窗口,我应该使用它来销毁所有的内存,当它关闭?第二个问题是我的实际代码(不是这个通用代码)在我尝试第二次启动时会导致崩溃。这个问题可能会随着这个问题的解决而消失,因为我不能在网上分享我的代码,所以我现在必须尽可能保持通用性,所以我希望首先解决这个问题,也许也能得到解决。在

请帮忙。。。我在这方面工作太久了!!!在此之前,感谢您的任何帮助。在


Tags: 代码importselfformuideftranslateqwidget