PyQt5中多线程应用中停止线程片段

本文介绍了如何在PyQt中使用QMainWindow作为基础,实现一个带有两个线程(兔子线程Rab和乌龟线程Tor)的示例窗口。展示了如何创建线程、连接信号与槽函数以及线程的启动和停止操作。
摘要由CSDN通过智能技术生成
class DemoWindow(QMainWindow, Ui_MainWindow):  # 样板界面
    def __init__(self, parent=None):
        super(DemoWindow, self).__init__(parent)
        self.setupUi(self)
        self.setWindowTitle('样例')
        self.handle()
 
    def handle(self):
        self.pushButton.clicked.connect(self.click_rab_tor)
        self.pushButton_4.clicked.connect(self.stop_thread)   # 停止线程
 
 
    def click_rab_tor(self):
        self.rab = ThreadRab()  # 创建兔子线程对象
        self.rab.update_date.connect(self.show_rab)  # 将线程信号连接到槽函数
        self.rab.start()  # 启动兔子线程
 
        self.tor = ThreadTor()  # 创建乌龟线程对象
        self.tor.sinOut.connect(self.show_tor)  # 将线程信号连接到槽函数
        self.tor.start()  # 启动乌龟线程
 
 
    # 停止线程
    def stop_thread(self):
        self.rab.terminate()
        self.tor.terminate()

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用信号与槽机制来实现这个功能。在按钮的槽函数,发射一个信号,然后在特定函数连接这个信号,当接收到这个信号时,特定函数就会停止执行。以下是一个示例代码: ```python from PyQt5.QtCore import QObject, pyqtSignal, QThread from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton import time class Worker(QObject): finished = pyqtSignal() def __init__(self): super().__init__() def long_running(self): for i in range(10): print(i) time.sleep(1) QApplication.processEvents() if self.isInterruptionRequested(): print("特定函数被终止") return self.finished.emit() class MainWindow(QWidget): def __init__(self): super().__init__() self.worker = Worker() self.thread = QThread() self.worker.moveToThread(self.thread) self.thread.started.connect(self.worker.long_running) self.worker.finished.connect(self.thread.quit) self.worker.finished.connect(self.worker.deleteLater) self.thread.finished.connect(self.thread.deleteLater) layout = QVBoxLayout() self.button = QPushButton("终止特定函数") self.button.clicked.connect(self.worker.requestInterruption) layout.addWidget(self.button) self.setLayout(layout) self.thread.start() if __name__ == '__main__': import sys app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) ``` 在这个示例代码,我们创建了一个 `Worker` 类来执行特定函数 `long_running`。在 `long_running` 函数,我们使用了 `QApplication.processEvents()` 来处理事件循环,以便在运行特定函数时仍然能够响应按钮点击事件。在 `MainWindow` 类,我们创建了一个按钮,并将其连接到 `worker.requestInterruption` 槽函数,以便在点击按钮时终止特定函数的执行。我们还使用了 `QThread` 来将 `Worker` 类的执行移动到单独的线程,以便在执行特定函数时不会阻塞主线程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值