pyqt5 qthread终止线程
时间: 2023-05-09 10:04:25 浏览: 753
PyQt5多线程的执行和停止
使用QThread在PyQt5中开发多线程应用程序是很常见的,但有时候我们需要停止或者终止某个线程,这个时候要怎样做呢?
PyQt5提供了一种简单有效的方式来终止线程,我们可以通过附加一个标志位来实现正常停止线程的操作。具体的过程如下:
1. 在需要终止的线程中定义一个布尔型变量,例如self._isRunning = True。
2. 在线程的run()方法中循环执行任务,并在合适的地方检查self._isRunning的状态。如果该变量为False,则结束循环并停止线程。
3. 在主线程中通过改变self._isRunning的值来控制线程的停止。
下面是一个简单的实例,演示如何通过设置布尔型变量来控制线程的停止:
```python
import sys
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
class TestThread(QThread):
stop_signal = pyqtSignal()
def __init__(self, parent=None):
super(TestThread, self).__init__(parent)
self._isRunning = True
def run(self):
while self._isRunning:
print('Thread is running...')
self.sleep(1)
self.stop_signal.emit()
def stop(self):
self._isRunning = False
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.initUI()
def initUI(self):
self.btn_start = QPushButton('Start', self)
self.btn_stop = QPushButton('Stop', self)
layout = QVBoxLayout(self)
layout.addWidget(self.btn_start)
layout.addWidget(self.btn_stop)
self.btn_start.clicked.connect(self.startThread)
self.btn_stop.clicked.connect(self.stopThread)
self.thread = TestThread()
self.thread.stop_signal.connect(self.stopCompleted)
def startThread(self):
self.thread.start()
def stopThread(self):
self.thread.stop()
def stopCompleted(self):
print('Thread stopped successfully!')
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
```
上述代码中,我们新定义了一个停止信号stop_signal,并在stop()方法中发射该信号。同时,在主窗口中也连接了stop_signal信号,以实现停止线程后的回调操作。
总的来说,在PyQt5中终止线程很简单,只需要在线程类中设置布尔型的变量,通过在主线程中改变该变量的值即可控制线程的停止。在PyQt5中,线程的终止操作应该由主线程来完成,这是比较安全可靠的做法。
阅读全文