pyqt5的下载进度条 实现模板

简介: pyqt5的下载进度条 实现模板

说明

QProgressBar,进度条控件,使用很简单。但如何结合下载功能,实现下载进度条呢?

本文主要参考了《PyQt5实现下载进度条》这篇文章,感谢作者的分享。
其中的下载线程,基本原封不动的照搬了,这个下载线程正是技术要点所在。

下载线程

这个下载线程,其实包含了不少知识点,可以多多借鉴参考哦。

1.pyqt5的线程 QThread
2.requests 流下载模式
3.自定义信号和槽函数

【如下代码,完全复制,直接运行,即可使用】

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

import queue     #如果不加载这个模板,pyinstaller打包后,可能无法运行requests模板
import requests
################################################


################################################
class Widget(QWidget):
    def __init__(self, *args, **kwargs):
        super(Widget, self).__init__(*args, **kwargs)
        layout = QHBoxLayout(self)

        # 增加进度条
        self.progressBar = QProgressBar(self, minimumWidth=400)
        self.progressBar.setValue(0)
        layout.addWidget(self.progressBar)

        # 增加下载按钮
        self.pushButton = QPushButton(self, minimumWidth=100)
        self.pushButton.setText("下载")
        layout.addWidget(self.pushButton)

        # 绑定按钮事件
        self.pushButton.clicked.connect(self.on_pushButton_clicked)




    # 下载按钮事件
    def on_pushButton_clicked(self):
        the_url = 'http://cdn2.ime.sogou.com/b24a8eb9f06d6bfc08c26f0670a1feca/5c9de72d/dl/index/1553820076/sogou_pinyin_93e.exe'
        the_filesize = requests.get(the_url, stream=True).headers['Content-Length']
        the_filepath ="D:/sogou_pinyin_93e.exe"
        the_fileobj = open(the_filepath, 'wb')
        #### 创建下载线程
        self.downloadThread = downloadThread(the_url, the_filesize, the_fileobj, buffer=10240)
        self.downloadThread.download_proess_signal.connect(self.set_progressbar_value)
        self.downloadThread.start()



    # 设置进度条
    def set_progressbar_value(self, value):
        self.progressBar.setValue(value)
        if value == 100:
            QMessageBox.information(self, "提示", "下载成功!")
            return






##################################################################
#下载线程
##################################################################
class downloadThread(QThread):
    download_proess_signal = pyqtSignal(int)                        #创建信号

    def __init__(self, url, filesize, fileobj, buffer):
        super(downloadThread, self).__init__()
        self.url = url
        self.filesize = filesize
        self.fileobj = fileobj
        self.buffer = buffer


    def run(self):
        try:
            rsp = requests.get(self.url, stream=True)                #流下载模式
            offset = 0
            for chunk in rsp.iter_content(chunk_size=self.buffer):
                if not chunk: break
                self.fileobj.seek(offset)                            #设置指针位置
                self.fileobj.write(chunk)                            #写入文件
                offset = offset + len(chunk)
                proess = offset / int(self.filesize) * 100
                self.download_proess_signal.emit(int(proess))        #发送信号
            #######################################################################
            self.fileobj.close()    #关闭文件
            self.exit(0)            #关闭线程


        except Exception as e:
            print(e)





####################################
#程序入口
####################################
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

本文如有帮助,敬请留言鼓励。
本文如有错误,敬请留言改进。

目录
相关文章
|
Python
Python3,2行代码,多种方法,直接把网页内容转换成PDF文档和图片。
Python3,2行代码,多种方法,直接把网页内容转换成PDF文档和图片。
833 0
|
缓存 NoSQL 安全
【Redis系列笔记】缓存三剑客
缓存穿透是指请求一个不存在的数据,缓存层和数据库层都没有这个数据,这种请求会穿透缓存直接到数据库进行查询。它通常发生在一些恶意用户可能故意发起不存在的请求,试图让系统陷入这种情况,以耗尽数据库连接资源或者造成性能问题。 缓存击穿发生在访问热点数据,大量请求访问同一个热点数据,当热点数据失效后同时去请求数据库,瞬间耗尽数据库资源,导致数据库无法使用。 缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。
744 2
|
安全 网络协议 Shell
渗透测试工具用法技巧入门到进阶
零基础网盘 百度网盘-19****394的分享 新手入门过程 看完 后面有进阶过程 简单工具
637 0
|
存储 JavaScript 前端开发
小白实战!用JS实现一个3D翻书效果,附上代码
小白实战!用JS实现一个3D翻书效果,附上代码
|
人工智能 IDE 开发工具
如何快速提升编码效率: GitHub Copilot的入门教程(下)
如何快速提升编码效率: GitHub Copilot的入门教程
|
JSON 自然语言处理 安全
微调大型语言模型进行命名实体识别
大型语言模型的目标是理解和生成与人类语言类似的文本。它们经过大规模的训练,能够对输入的文本进行分析,并生成符合语法和语境的回复。这种模型可以用于各种任务,包括问答系统、对话机器人、文本生成、翻译等。
858 1
|
机器学习/深度学习 传感器 自动驾驶
【机器学习】机器学习赋能交通出行:智能化实践与创新应用探索
【机器学习】机器学习赋能交通出行:智能化实践与创新应用探索
1473 0
|
数据采集 运维 供应链
大型集团物料主数据实践分享
工业企业中物料主数据的数量最大,也最关键。
大型集团物料主数据实践分享