博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pyqt5的下载进度条 实现模板
阅读量:6507 次
发布时间:2019-06-24

本文共 3231 字,大约阅读时间需要 10 分钟。

说明

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

本文主要参考了《》这篇文章,感谢作者的分享。

其中的下载线程,基本原封不动的照搬了,这个下载线程正是技术要点所在。

下载线程

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

1.pyqt5的线程 QThread

2.requests 流下载模式
3.自定义信号和槽函数

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

import sysfrom 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_())

本文如有帮助,敬请留言鼓励。

本文如有错误,敬请留言改进。

转载地址:http://yszfo.baihongyu.com/

你可能感兴趣的文章
iOS打电话,发短信,发邮件,打开网址
查看>>
06-验证码-基本功能实现
查看>>
Java数据结构与算法(六) 希尔排序
查看>>
canvas学习笔记
查看>>
IntelliJ Idea下Go项目开启Debug调试
查看>>
elasticsearch安装步骤
查看>>
PHP获取Cookie模拟登录CURL(转)
查看>>
PHP-权限控制类(转)
查看>>
CSS3秘笈第三版涵盖HTML5学习笔记9~12章
查看>>
bzoj1044木棍分割
查看>>
leetcode-136-Single Number
查看>>
微信小程序笔记<五> 页面管理及生命周期(route)——getCurrentPages()
查看>>
http服务器小项目
查看>>
JS案例:Jq中的fadeOut和fadeIn实现简单轮播(没完善,简单实现)
查看>>
一些数学上的名词及操作
查看>>
C# DataGridVie利用model特性动态加载列
查看>>
IPv6 地址分类
查看>>
<%@ include %>指令和<jsp:include>区别
查看>>
因为文件组 'PRIMARY' 已满 解决办法
查看>>
Flume 读取实时更新的日志文件
查看>>