PyQt5实现进度条与定时器及子线程同步关联

这篇文章主要为大家详细介绍了PyQt5如何实现进度条与定时器及子线程的同步关联,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

进度条是当我们处理冗长的任务时使用的控件,它是以动画的形式让用户知道该任务正在取得进展。

在PyQt5中的进度条对应组件是QProgressBar,该对象继承自QWidget组件。一般在生产业务的实现过程中还需要借助定时器来实现的。

在实际使用的过程当中进度条的进度控制往往还要根据子线程的业务执行过程来设置进度显示。

PyQt5在之前的文章中已经多次使用,想必大家都比较熟悉了。若是没有安装的话使用pip的方式安装一下即可。

pip install PyQt5

接下来将本文中使用到的相关模块都导入到代码块中。

# It imports all the classes, methods, and attributes of the `PyQt5.QtWidgets` module.
from PyQt5.QtWidgets import *

# It imports all the classes, methods, and attributes of the `PyQt5.QtCore` module.
from PyQt5.QtCore import *

# It imports all the classes, methods, and attributes of the `PyQt5.QtGui` module.
from PyQt5.QtGui import *

# It imports the `sys` module.
import sys

# It imports the `time` module and it renames it to `t`.
import time as t

接下来我们创建一个ProgressBarUI的python类,将所有的进度条的布局以及槽函数放到该类中。

# This class is a widget that displays a progress bar.
class ProgressBarUI(QWidget):
    def __init__(self):
        super(ProgressBarUI, self).__init__()
        self.init_ui()

    def init_ui(self):
        """
        This function initializes the UI.
        """
        self.setWindowTitle('PyQt5进度条案例 公众号:Python 集中营')
        self.setWindowIcon(QIcon('prop.png'))
        self.resize(500, 200)

        self.progressBar = QProgressBar()
        self.progressBar.setValue(0)
        self.progressBar.setAlignment(Qt.AlignCenter)

        hbox = QHBoxLayout()
        hbox.addWidget(self.progressBar)

        self.timer = QTimer()
        self.timer.timeout.connect(self.listen_step)
        self.timer.start(100)

        self.step = 0

        self.thread_ = WorkThread()
        self.thread_.thread_step.connect(self.step_add)

        self.thread_.start()

        self.setLayout(hbox)

    def step_add(self, n):
        """
        It adds n to the current value of the counter

        :param n: the number of steps to take
        """
        self.step = self.step + n

    def listen_step(self):
        """
        > The function `listen_step` is called by the `listen` function, and it returns the next step in the conversation
        """
        if self.progressBar.value() >= 100:
            self.timer.stop()
        else:
            self.progressBar.setValue(self.step)

创建一个子线程WorkThread继承自QThread用于处理所有的业务实现逻辑。

# This class is a subclass of QThread and it's used to create a thread that will run the function that will be passed to
# it
class WorkThread(QThread):
    # A signal that is emitted when the value of the counter changes.
    thread_step = pyqtSignal(int)

    def __init__(self):
        """
        A constructor. It is called when an object is created from a class and it allows the class to initialize the
        attributes of a class.
        """
        super(WorkThread, self).__init__()
        self.working = True

    def __del__(self):
        """
        A destructor. It is called when the object is destroyed.
        """
        self.working = False

    def run(self):
        for n in range(1, 101):
            self.thread_step.emit(1)
            t.sleep(0.1)

使用python模块的main函数,将整个应用加入到系统的主体循环中。

# A common idiom to use this as the last statement in a module (a file that contains Python code).
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = ProgressBarUI()
    main.show()
    sys.exit(app.exec_())

到此这篇关于PyQt5实现进度条与定时器及子线程同步关联的文章就介绍到这了,更多相关PyQt5同步关联内容请搜索昆居客【www.kunjuke.com】以前的文章或继续浏览下面的相关文章希望大家以后多多支持昆居客【www.kunjuke.com】!

相关推荐:

研究:苹果 iPhone 普及与美国生育率下滑存在关联

感谢网友 Coje_He 的线索投递! 7 月 1 日消息,据 MacWorld 报道,美国生育率已跌至历史低位。美国政府数据网站 GovFacts 的数据显示,该国自 2007 年起生育率就长期低于人口更替水平。如今,美国国家经济研究局的科研人员认为,他们找到了生育率下滑的诱因 —— 苹果 iPhone。2007 年 iPhone 首发至 2011 年期间,AT&T 是这款手机的独家运营...

酷狗大字版app定时关闭设置

酷狗大字版怎么设置定时关闭,打开软件,在我的界面找到并点击右上角的“齿轮”选项,在设置界面往下滑动,找到并点击“定时关闭”选项,最后,在弹出的选项框中选择好时间即可。 酷狗大字版app定时关闭设置: 1、首先,打开软件,在我的界面找到并点击右上角的“齿轮”选项; 2、在设置界面往下滑动,找到并点击“定时关闭”选项; 3、最后,在弹出的选项框中选择好时间即可。 以上就是小编整理带来的酷狗大字版怎么设...

OPPO Reno2如何设置定时开关机与睡眠模式【技巧】

OPPO Reno2用户需同时设置定时开关机和睡眠模式:定时开关机通过“设置→其他设置→定时开关机”启用并设定时间,依赖ColorOS 11底层调度;睡眠模式通过控制中心月亮图标或“设置→声音与振动→免打扰模式”配置自动启停,屏蔽通知但不关机;二者配合实现夜间静音与自动断电双重防护。 OPPO Reno2用户想让手机在晚上自动关机、早上自动开机,同时避免睡前被消息打扰,需要同时配置定时开关机和睡眠...

OPPO Reno2屏幕护眼模式与深色模式定时切换教程【操作】

OPPO Reno2用户可通过设置定时开启夜间护眼与暗色模式实现夜间自动降蓝光+深色界面。需分别进入【设置→显示与亮度→夜间护眼】和【暗色模式】,设定完全一致的自定义时段(如20:00–06:30)或启用日出日落联动(需授位置权限),并调节色温至70%~85%;控制中心支持月亮(暗色)、眼睛(护眼)图标一键同步开关。 OPPO Reno2用户需要在夜间自动降低屏幕蓝光并切换深色界面,避免手动反复操...

百度浏览器怎么关闭关联搜索建议_百度搜索框历史提示词删除方法

需关闭搜索个性化推荐与兴趣推送、清除本地搜索历史及自动填充数据、禁用百度账号同步并清空云端记录、逐条删除特定联想词。 你在百度浏览器地址栏输入关键词时,下拉列表反复弹出过往搜索词、广告推广词或不相关联想项,影响输入效率且存在隐私泄露风险,需要从源头关闭关联搜索建议并清除历史提示词。 关闭搜索个性化推荐与兴趣推送 这一步直接切断百度浏览器生成非中性联想词的算法基础。个性化推荐会把你的点击、停留、搜索...

GitHub Copilot对象关系映射:在Hibernate与MyBatis-Plus中快速配置多对多关联

Hibernate需用@ManyToMany+@JoinTable配置User与Role多对多关系,MyBatis-Plus须通过XML中或@Results+@Many实现联查,Copilot可辅助生成代码但需校验表名、字段名一致性。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜ 要在Hibernate或MyBatis-Plus中让两个实体...
· AI · 129374

芒果浏览器怎样设置夜间定时关闭_芒果浏览器设置夜间定时关闭【健康】

可通过系统深色模式联动、第三方自动化工具或网页脚本三种方式实现芒果浏览器夜间定时启用/关闭夜间模式:一、开启系统深色模式定时并设置浏览器跟随;二、用Tasker等工具定时模拟点击“Aa”切换;三、对固定网站注入JS脚本按时间自动启停深色样式。 如果您希望芒果浏览器在夜间特定时段自动启用夜间模式并定时关闭,以减少蓝光暴露、保障睡眠节律,则可通过组合使用浏览器内置功能与系统级设置实现。以下是多种可行的...

WinSCP怎么设置编辑工具 WinSCP关联记事本方法【技巧】

WinSCP默认内部编辑器易致中文乱码,应设为记事本或Notepad++等外部编辑器:先在【编辑→配置→编辑器】中添加notepad.exe或notepad++.exe并置顶;用记事本编辑时须手动选UTF-8编码保存,否则上传后Linux程序解析失败。 WinSCP连接Linux服务器后,双击远程文件默认用内部编辑器打开,但中文乱码、换行符错乱、无法保存UTF-8格式等问题频发,必须将编辑工具切换...