pyqt5实现wget下载视频文件的进度条显示

3 篇文章 0 订阅
2 篇文章 0 订阅

简介:

最近在写一个项目,用到了wget下载视频,为了更好的视觉效果,所以使用pyqt5中QProgressBar来实现下载进度条。当视频开始下载就会弹出下载进度条,下载完成后进度条消失。效果如下图;

具体代码实现 :

import os
import sys
import wget
from PyQt5 import QtWidgets
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import QProgressBar, QHBoxLayout, QWidget
from config.path import parent_path
from PyQt5.QtCore import QThread, pyqtSignal


class DownloadWidget(QWidget):
    def __init__(self, video_url, video_name):
        super(DownloadWidget, self).__init__()
        self.url = video_url
        self.target_name = video_name
        self.setWindowTitle('视频下载中...')
        layout = QHBoxLayout(self)

        # 创建进度条
        self.progressBar = QProgressBar(self, minimumWidth=400)
        self.progressBar.setStyleSheet("QProgressBar { border: 2px solid grey; border-radius: 5px; background-color: "
                                       "#FFFFFF; text-align: center;}QProgressBar::chunk {background:QLinearGradient("
                                       "x1:0,y1:0,x2:2,y2:0,stop:0 #666699,stop:1  #DB7093); }")
        font = QFont()
        font.setBold(True)
        font.setWeight(30)
        self.progressBar.setFont(font)

        self.progressBar.setValue(0)
        self.progressBar.setMinimum(0)
        self.progressBar.setMaximum(100)
        self.progressBar.setFormat('Loaded  %p%'.format(self.progressBar.value() - self.progressBar.minimum()))

        layout.addWidget(self.progressBar)

        # 创建并启动下载线程
        self.download_thread = DownloadThread(self.url, self.target_name)
        self.download_thread.progressChanged.connect(self.update_progress)
        self.download_thread.start()

    # 更新进度条
    def update_progress(self, value):
        if value == 100:
            print('下载完成!!!!!!')
            self.close()
        self.progressBar.setValue(value)


class DownloadThread(QThread):
    # 定义信号
    progressChanged = pyqtSignal(int)

    def __init__(self, video_url, video_name):
        super(DownloadThread, self).__init__()
        self.url = video_url
        self.target_name = video_name

    def run(self):
        tmpdir = parent_path + '\\static\\mp4'
        self.download_video(self.url, os.path.join(tmpdir, self.target_name))

    # 下载视频
    def download_video(self, url, target_path):
        wget.download(url, out=target_path, bar=self.progress_bar_callback)
        self.progressChanged.emit(100)

    # 回调函数,用于更新进度条
    def progress_bar_callback(self, current, total, width=80):
        progress = current / total * 100
        self.progressChanged.emit(int(progress))


if __name__ == '__main__':
    print("system open")
    app = QtWidgets.QApplication(sys.argv)
    main_ui = DownloadWidget("url", 'test.mp4')
    main_ui.show()
    sys.exit(app.exec_())

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值