当 GUI 退出时终止 QThread

Terminate QThread when GUI exits

我在后台使用 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 事件循环。

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