您现在的位置是:首页 > 文章详情

pyqt5的下载进度条 实现模板

日期:2019-03-28点击:388

说明

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

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

原文链接:https://yq.aliyun.com/articles/695920
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章