从MainWindow产生的窗口在关闭时不会完全关闭

时间:2017-06-30 22:09:39

标签: python multithreading pyqt5 qmainwindow qdialog

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

这是我的对话窗口:

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_())

这是我的产卵窗口代码(form_test.py):

from PyQt5 import QtCore, QtGui, QtWidgets
import time, threading

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(190, 170, 93, 28))
        self.pushButton.setObjectName("pushButton")

        self.pushButton.clicked.connect(self.pushButtonClicked)

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

        self.loopThread = threading.Thread(target = self.looping)
        self.loopThread.daemon = True
        self.loopThread.start()

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.pushButton.setText(_translate("Form", "PushButton"))

    def pushButtonClicked(self):
        print("clicked")

    def looping(self):
        count = 0
        while(True):
            print('looping... ' + str(count))
            count = count + 1
            time.sleep(1)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

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

请帮助......我已经在这个FAR上工作太久了!!!提前感谢您提供任何帮助。

0 个答案:

没有答案