python - 当 GUI 退出时终止 QThread

标签 python python-3.x pyqt pyqt5 qthread

我正在使用 QThreads 在后台运行一个函数,但是当我退出 GUI 应用程序时,QThread 仍然继续运行。

有C++的例子,但是不知道怎么用python实现

class PF35Thread(QtCore.QThread):
    signalPF35 = pyqtSignal()
    def __init__(self, parent = None):
        super().__init__(parent)
    def run(self):
        newcase = newcaseList[-1]
        os.system('EAZ{0}(3,5).EAZ{0}(3,5).OUT'.format(newcase))
        self.signalPF35.emit()

如何在 GUI 关闭时终止 QThread?

最佳答案

我认为在你的情况下线程是必需的,因为 os.system() 正在阻塞,但是如果你使用 QProcess 它执行类似的任务并且你不需要线程,它还允许使用 Qt eventloop 更容易地管理.

from PyQt5 import QtCore, QtGui, QtWidgets


class MainWindow(QtWidgets.QMainWindow):
    signalPF35 = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        button = QtWidgets.QPushButton("Start task", clicked=self.on_clicked)
        self.setCentralWidget(button)
        self._process = QtCore.QProcess(self)
        self._process.finished.connect(self.on_finished)

    @QtCore.pyqtSlot()
    def on_clicked(self):
        newcase = newcaseList[-1]
        self._process.start('EAZ{0}(3,5).EAZ{0}(3,5).OUT'.format(newcase))

    @QtCore.pyqtSlot()
    def on_finished(self):
        self.signalPF35.emit()

    def closeEvent(self, event):
        self._process.kill()
        super(MainWindow, self).closeEvent(event)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

关于python - 当 GUI 退出时终止 QThread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56194035/

相关文章:

python - 如何在不发出示例请求的情况下检查 requests.Session 是否已通过身份验证?

python - 如何在保留字典中的顺序的同时重命名键(Python 3.7+)?

python - 如何为 PyQt 演示和 Qt 工具安装 Qt 文档

python - 如何在 QTextEdit 中创建完全透明

python - 名称错误 : name 'api' is not defined for Django Rest Framework

python - Python 3.3 中的包管理 - 最好使用的工具是什么?

python - 使用随机数创建二维数组的简单方法 (Python)

python - matplotlib 3 : 3D scatter plots with tight_layout

python - 如何在 PyQt5 中制作嵌套堆叠布局?

python - 我可以使用 Augustus (Python) 应用包含 DefineFunction 的 PMML 模型吗?