pyqt5终止线程QtCore.QThread运行,例子
时间: 2024-01-28 22:44:30 浏览: 169
QT5线程QThread使用示例
5星 · 资源好评率100%
可以使用QThread的信号和槽机制来终止线程的运行。具体实现方式可以参考以下代码示例:
```python
import sys
import time
from PyQt5 import QtCore, QtWidgets
class Worker(QtCore.QObject):
finished = QtCore.pyqtSignal()
progress = QtCore.pyqtSignal(int)
def __init__(self):
super().__init__()
@QtCore.pyqtSlot()
def run(self):
count = 0
while True:
if count >= 100:
self.finished.emit()
break
self.progress.emit(count)
time.sleep(0.1)
count += 1
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.thread = QtCore.QThread()
self.worker = Worker()
self.worker.moveToThread(self.thread)
self.progress_bar = QtWidgets.QProgressBar()
self.setCentralWidget(self.progress_bar)
self.worker.finished.connect(self.thread.quit)
self.worker.finished.connect(self.worker.deleteLater)
self.thread.finished.connect(self.thread.deleteLater)
self.worker.progress.connect(self.progress_bar.setValue)
self.thread.started.connect(self.worker.run)
self.thread.start()
self.setWindowTitle("PyQt5 Thread Example")
def closeEvent(self, event):
self.worker.finished.emit()
self.thread.quit()
self.thread.wait()
event.accept()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
在上面的代码中,我们定义了一个Worker类,该类继承自QObject,其中包含了一个run函数,该函数会不断地发送进度信号,直到完成任务。我们还定义了一个MainWindow类,该类继承自QMainWindow,其中包含了一个进度条,可以显示任务的进度。在MainWindow的构造函数中,我们创建了一个QThread对象和一个Worker对象,并将Worker对象移动到QThread线程中。我们还将Worker类的信号和槽连接起来,以便在Worker运行时更新进度条。最后,我们启动了QThread线程,并在关闭窗口时终止了线程的运行。
在上述代码中,我们并没有显示地终止线程的运行,而是通过发送finished信号来告诉线程任务已经完成。这种方式可以让线程在完成任务后自动退出,避免了线程无法退出的问题。如果需要立即终止线程的运行,可以在Worker类中添加一个停止标志,并在run函数中检查该标志。当需要终止线程时,设置该标志即可。
阅读全文