栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pyqt5的下载进度条 实现模板

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/219928.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号