我正在使用 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/