pyqt5终止线程QtCore.QThread运行,点击按钮安全终止例子
时间: 2024-05-09 17:21:35 浏览: 106
pyqt关闭程序实例
可以使用QThread的信号和槽机制来安全终止线程,具体实现方式可以参考以下代码:
```
import sys
from PyQt5.QtCore import QThread, pyqtSignal, Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
class Worker(QThread):
finished = pyqtSignal()
def __init__(self, parent=None):
super(Worker, self).__init__(parent)
self.is_running = True
def run(self):
while self.is_running:
# 执行线程操作
pass
self.finished.emit()
def stop(self):
self.is_running = False
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.worker = Worker()
self.button = QPushButton('停止线程', self)
self.button.clicked.connect(self.stop_thread)
self.setCentralWidget(self.button)
def stop_thread(self):
self.worker.stop()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
window.worker.start()
sys.exit(app.exec_())
```
在这个例子中,我们创建了一个继承自QThread的Worker类,这个类中包含了一个is_running变量,用于判断线程是否正在运行,以及一个stop方法,用于设置is_running为False,以便安全终止线程。在run方法中,我们使用while循环来模拟线程的操作,当is_running为False时,循环结束,然后发送finished信号,表示线程已经执行完毕。
在主窗口中,我们创建了一个Worker实例,并将其作为成员变量保存起来,然后创建了一个按钮,用于触发停止线程的操作。在stop_thread方法中,我们调用了Worker实例的stop方法,以便安全终止线程。最后,我们启动了Worker实例的run方法,并进入主循环。当用户点击停止线程按钮时,线程会被安全终止。
阅读全文