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

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

  • 10
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在PyQt5中添加进度条,可以使用QProgressBar类。首先,需要导入QProgressBar类的模块函数,如下所示:\[1\] ```python from PyQt5.QtWidgets import QProgressBar ``` 然后,可以创建一个QProgressBar对象,并设置其样式和属性,如下所示: ```python progressBar = QProgressBar() progressBar.setStyleSheet("QProgressBar { border: 2px solid grey; border-radius: 5px; background-color: #FFFFFF; text-align: center;}") progressBar.setValue(0) # 设置初始值 ``` 可以根据需要设置进度条的样式,包括边框、背景颜色等。然后,使用setValue()方法设置进度条的当前值。 接下来,将进度条添加到窗口中的适当位置,例如布局或者窗口的特定区域。 最后,可以使用定时器来更新进度条的值,以模拟进度的增加。可以使用QTimer类来创建定时器,并使用timeout信号连接到更新进度条的函数。在函数中,可以使用setValue()方法来递增进度条的值,并在达到100%时执行相应的操作,如关闭窗口或跳转到下一个窗口。\[3\] ```python from PyQt5.QtCore import QTimer def set_loader(): timer = QTimer() timer.timeout.connect(load_progress_bar) timer.start(100) def load_progress_bar(): progressBar.setValue(progressBar.value() + 1) if progressBar.value() >= 100: # 执行相应的操作,如关闭窗口或跳转到下一个窗口 timer.stop() ``` 这样,就可以在PyQt5中添加进度条实现相应的功能了。 #### 引用[.reference_title] - *1* [PyQt5进度条:QProgressBar](https://blog.csdn.net/weixin_43990846/article/details/123880081)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [(3) PyQt5 实现漂亮进度条 ProgressBar](https://blog.csdn.net/lildkdkdkjf/article/details/121955573)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值