PyQt5多线程的执行和停止

这篇具有很好参考价值的文章主要介绍了PyQt5多线程的执行和停止。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考资料:哔哩哔哩 pyqt5 thread多线程示例
以下代码来自该视频,我自己手动实现了一下,当作一个模板来学习,欢迎大家一起学习。

运行示例

pyqt5 qthread终止线程,项目,qt,ui,python,pyqt5
三个进程同时执行,并且可以单独控制暂停和继续执行。
以下给出运行代码:

from PyQt5 import QtCore,QtWidgets,QtGui
from PyQt5 import uic
import sys,time

class THREAD_APP(QtWidgets.QMainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.ui = uic.loadUi('thread.ui',self)

        self.thread={}
        self.pushButton.clicked.connect(self.start_worker_1)
        self.pushButton_2.clicked.connect(self.start_worker_2)
        self.pushButton_3.clicked.connect(self.start_worker_3)
        self.pushButton_4.clicked.connect(self.stop_worker_1)
        self.pushButton_5.clicked.connect(self.stop_worker_2)
        self.pushButton_6.clicked.connect(self.stop_worker_3)

    def start_worker_1(self):
        self.thread[1] = ThreadClass(parent=None,index=1)
        self.thread[1].start()
        self.thread[1].any_signal.connect(self.my_function)
        self.pushButton.setEnabled(False)

    def start_worker_2(self):
        self.thread[2] = ThreadClass(parent=None, index=2)
        self.thread[2].start()
        self.thread[2].any_signal.connect(self.my_function)
        self.pushButton_2.setEnabled(False)

    def start_worker_3(self):
        self.thread[3] = ThreadClass(parent=None,index=3)
        self.thread[3].start()
        self.thread[3].any_signal.connect(self.my_function)
        self.pushButton_3.setEnabled(False)

    def stop_worker_1(self):
        self.thread[1].stop()
        self.pushButton.setEnabled(True)

    def stop_worker_2(self):
        self.thread[2].stop()
        self.pushButton_2.setEnabled(True)

    def stop_worker_3(self):
        self.thread[3].stop()
        self.pushButton_3.setEnabled(True)

    def my_function(self,counter):
        cnt = counter
        index = self.sender().index
        if index == 1:
            self.progressBar.setValue(cnt)
        if index == 2:
            self.progressBar_2.setValue(cnt)
        if index == 3:
            self.progressBar_3.setValue(cnt)

class ThreadClass(QtCore.QThread):
    any_signal = QtCore.pyqtSignal(int)
    def __init__(self,parent=None,index=0):
        super(ThreadClass,self).__init__(parent)
        self.index = index
        self.is_running = True
    def run(self):
        print('Starting thread...',self.index)
        cnt=0
        while(True):
            cnt+=1
            if cnt==99: cnt=0
            time.sleep(0.01)
            self.any_signal.emit(cnt)

    def stop(self):
        self.is_running=False
        print('stopping thread...',self.index)
        self.terminate()


app=QtWidgets.QApplication(sys.argv)
mainWindow = THREAD_APP()
mainWindow.show()
sys.exit(app.exec_())

完整程序参考:PyQt5 多线程执行和停止示例文章来源地址https://www.toymoban.com/news/detail-577534.html

到了这里,关于PyQt5多线程的执行和停止的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyQt5 多线程和异步刷新UI

    以下简介一个基本的PyQt程序。 需要导入的类主要来自三个包 from PyQt5.QtWidgets import 常用的控件 PyQt5.QtCore 核心功能类,如QT,QThread,pyqtSignal PyQt5.QtGui UI类,如QFont 基础的程序结构: 注意: 使用join方法会让主线程阻塞在这里,等待子线程结束,在里面可以设置阻塞的时间 a

    2024年02月11日
    浏览(40)
  • Pyqt5实现新线程更新窗口UI

    我们用pyqt5开发窗口应用时,应用会执行一些耗时的操作,如复制大量文件,下载大量数据等。一般情况下,在这些操作没有完成时,窗口的UI处于“假死”状态,不会更新,只有所有操作完成后,窗口的状态才会更新。这样对用户使用非常不友好。 使用多线程技术,在新线

    2024年02月13日
    浏览(42)
  • nuitka打包python的PyQt5成exe可执行文件

    可以打包多文件,也可以打包单文件。 使用的python版本是3.8.10 1、下载gcc 方式1:可以到网站下载,点我跳转 方式2:可以直接去网盘下载,点我跳转 提取码:8888 网盘里面也有python3.8.10的安装包,下载后直接安装即可。 下载 64位 winlibs-x86_64-posix-seh-gcc-11.3.0-llvm-14. 后,解压到

    2024年02月05日
    浏览(56)
  • 【PyQt5实现多线程更新UI】- 提高程序效率,优化用户体验

    【PyQt5实现多线程更新UI】- 提高程序效率,优化用户体验 在PyQt5应用程序的开发中,当程序需要处理大量数据或进行复杂的计算时,如果仅使用主线程,会导致GUI界面失去响应,用户体验较差。为了解决这个问题,通常需要使用多线程技术。 而在使用多线程时,往往需要更新

    2024年02月07日
    浏览(32)
  • PyQt5 执行耗时操作导致界面卡死或未响应的解决办法

    当用PyQt5开发一个GUI界面 ,需要执行业务逻辑时,后台逻辑执行时间长,界面就容易出现卡死、未响应等问题。 在PyQt中,GUI界面本身就是一个处理事件循环的主线程,当进行耗时操作时,主线程GUI需要等待操作完成后才会响应,在等待这段时间,整个GUI就处于卡死的状态。

    2024年02月09日
    浏览(39)
  • PyQt5学习笔记--摄像头实时视频展示、多线程处理、视频编解码

    目录 1--前言 2--基于Qt Designer设计ui文件 3--视频的编解码操作 4--完整代码 5--结果展示 6--存在的问题 7--参考 ① 创建两个线程, 主线程 为ui线程, 子线程 用于读取摄像头视频,将处理后的图像帧数据(处理操作可以人为添加)返回到主线程进行可视化; ② 子线程向主线程传

    2023年04月09日
    浏览(45)
  • 【pyqt5】【多线程】【matplotlib】解决子线程上运行的matplotlib无法在主线程上的UI界面上绘制图形的问题

    在使用PyQt5为一个项目写UI界面的时候,我试图把matplotlib绘制的图像展示在UI界面的窗口中,但matplotlib是运行在一个子线程中的,这导致它出现了如下警告: UserWarning: Starting a Matplotlib GUI outside of the main thread will likely fail. 并且我无法使用 matplotlib.backends.backend_qt5agg 下的 Figur

    2024年02月08日
    浏览(48)
  • python pyqt5与opencv 遇到的那些坑,pyqt5页面搭建,设置pyqt5设置背景图

    设置pyqt5的背景图片,可以设置一个lable控件,将控件至于底层,然后设置他的背景图 注意路径 解决代码 使用Qt Desiggnei 绘制界面后转换成py代码后 最好不要在生成的py页面代码添加 信号槽,到时候页面改动比较麻烦 转换代码 pyuic5 -o 【转换后的.py】 【UI界面的.ui】 推荐的方

    2024年02月09日
    浏览(57)
  • 【PyQt5】logging封装+pyqt5展示系统日志

    创建logging对象 设置日志输出级别 指定日志输出格式 指定日志输出路径 指定日志输出文件 控制台输出 文件输出 7.1 指定FileHandler 7.2 设置日志输出格式 7.3 设置过滤条件 7.4 将文件输出日志添加过滤条件 7.5 对logger增加handler日志处理器 1.cmd中输入命令,将.ui转换成.py 2.重新封

    2024年02月06日
    浏览(40)
  • 【Python进阶-PyQt5】00搭建PyQt5环境

    我们编写的程序,有时用到的Python库是不一样的,比如说开发桌面应用程序我们主要用到PyQt5相关的Python库、开发Web应用程序我们主要用到Django相关的Python库等等。假设我们在开发桌面应用程序的时候除了PyQt5相关的Python库外,还附加了其他的Python库,比如有关Django的Python库。

    2024年02月08日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包