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_())
本文如有帮助,敬请留言鼓励。
本文如有错误,敬请留言改进。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【云周刊】第212期:发布SaaS加速器:我们不做SaaS,我们只做SaaS生态的推进者和守护者
欢迎订阅云周刊 本期头条 发布SaaS加速器:我们不做SaaS,我们只做SaaS生态的推进者和守护者 上午的演讲过程当中,大家都听到了,整个阿里云的战略是不做SaaS坚持被集成。如何让合作伙伴以及客户来集成阿里云,关键是如何能够帮助合作伙伴构建业务系统,构建企业应用和SaaS,进而覆盖到更多的企业和客户,这是我们一个核心的内容。下面将重点介绍一下我们思考,为什么要做这件事情?与此同时,对于合作伙伴来说有什么样的帮助?我会具体介绍一下。点击查看 寻找 K8s 1.14 Release 里的“蚌中之珠”天马行空脚踏实地,阿里巴巴有群百里挑一的天才应届生 生于疼痛的阿里云我是如何拿到蚂蚁金服实习 offer 的我在阿里云做前端 技术干货 2019阿里云峰会•北京回顾合集:PDF下载2009年,阿里云正式成立;在过去的10年里,阿里云引领了国内云计算
- 下一篇
Go Context解读与实践
[TOC] 1 Context的初衷 In Go servers, each incoming request is handled in its own goroutine. Request handlers often start additional goroutines to access backends such as databases and RPC services. The set of goroutines working on a request typically needs access to request-specific values such as the identity of the end user, authorization tokens, and the request's deadline. When a request is canceled or times out, all the goroutines working on that request should exit quickly so the system can re...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS6,CentOS7官方镜像安装Oracle11G
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS6,7,8上安装Nginx,支持https2.0的开启