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

news2025/3/4 20:06:46

简介:

最近在写一个项目,用到了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_())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1329363.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sobit:将BRC20资产桥接到Solana ,加速铭文市场的火热

2023 年 1 月份后,比特币 Ordinals 协议出现后为铭文赛道的出现奠定了基础,它以聪为单位将比特币分成份,并在每一聪上攥刻不同的信息以达到非同质化资产的效果,而此后包括 BRC20 在内的诸多采用了 Ordinals 方案的应用不断面向市场…

生成式AI大模型对人类进化的影响

你是不是发现每天的工作都离不开ChatGPT之类的语言生成模型?离不开类似Midjourney的图像生成模型?离不开一些设计类的AI辅助工具?如果是,那说明你已经逐步被AI侵蚀了,你的创造力也正在逐渐下降,大模型正在剥…

使用通道和模式

通过通道、选择语句和最佳实践掌握 Go 中的并发编程 并发编程是构建高效和响应迅速的软件的强大范例。Go,也被称为 Golang,通过通道提供了一种健壮且优雅的解决方案来进行并发通信。在这篇文章中,我们将探讨通道的概念、它们在并发编程中的作…

Qt配置opencv,cmake编译参考笔记,已成功

Qt版本:Qt5.14.2 opencv:4.5.4(不要用4.5.5!!很坑别问我为什么知道) cmake:下的最新版本 前言:为什么非得要用cmake编译呢?跳过cmake不好吗? 之前用的opencv…

pickle反序列化

文章目录 基础知识pickle简介可序列化对象object.__reduce__() 函数 pickle过程详细解读opcode简介pickletools 漏洞利用利用思路如何手写opcode 工具pker实战例题[MTCTF 2022]easypickle[HZNUCTF 2023 preliminary]pickle 基础知识 pickle简介 与PHP类似,python也…

内存管理学习

内存管理 在计算系统中,通常存储空间分为两种:内部存储空间和外部存储空间。 内部存储空间通常访问速度比较快,能够按照变量地址随机访问,也就是我们通常所说的RAM(随机存储器),可以把它理解为…

两种方法解决win10开机慢,经验分享

方法一: 1、按快捷键“winR”打开 运行窗口。 2、这时候输入“msconfig”后 ,点击“确定”或者按“ENTER”键。 3、这时候会打开一个名为“系统配置”的窗口, 在“常规”选项框下 勾选“有选择的启动”下的“加载系统服务”和“加载启动项”。…

Python的环境搭建环境配置()

Python 环境搭建 一,下载Python 1.去官网 www.python.org 下载环境 2.如图点击Download 3.选择Windows 4.如图直接下载 5.直接勾选 6.后面就一直默认选项 Win11 安装目录 不能放在C盘的ProgramFIle路径下 二,测试环境是否安装成功 1.winR 输入cmd 2.输入python --versio…

[已解决] Ubuntu远程桌面闪退+登录显示“远程桌面由于数据加密错误 , 这个会话将结束“

两个月前,由于跑代码在Ubuntu配置环境,乱七八糟的下载了很多东西,导致了一系列问题..... 问题1 Ubuntu远程桌面闪退 实验室有两台服务器,IP后三位分别为141和142,其中141在输入密码后立即闪退,142可以正常…

110基于matlab的混合方法组合的极限学习机和稀疏表示进行分类

基于matlab的混合方法组合的极限学习机和稀疏表示进行分类。通过将极限学习机(ELM)和稀疏表示(SRC)结合到统一框架中,混合分类器具有快速测试(ELM的优点)的优点,且显示出显着的分类精…

华为鸿蒙开发适合哪些人学习?

随着鸿蒙系统的崛起,越来越多的人开始关注鸿蒙开发,并希望成为鸿蒙开发者。然而,鸿蒙开发并不适合所有人,那么哪些人最适合学习鸿蒙开发呢?本文将为您总结鸿蒙开发适合的人群。 一、具备编程基础的人 学习鸿蒙开发需要…

python报错A value is trying to be set on a copy of a slice

加入.copy()即可避免该报错提示 原代码: df5df4.drop_duplicates() print(df5.shape)df5[班型中文名称]df5[班型名称]-A print(df5.head()) 输出结果: 修改后代码: df5df4.drop_duplicates().copy() print(df5.shape)df5[班型中文名称]df…

MyBatis关联查询(三、多对多查询)

MyBatis关联查询(三、多对多查询) 需求:查询角色及角色赋予的用户信息。 分析:一个用户可以拥有多个角色,一个角色也可以赋予多个用户,用户和角色为双向的一对多关系,多对多关系其实我们看成是…

2. 行为模式 - 命令模式

亦称: 动作、事务、Action、Transaction、Command 意图 命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销…

SVM —— 代码实现

SMO 算法的实现步骤: 代码如下: import numpy as np import matplotlib.pyplot as plt import seaborn as sns import random# 设置中文字体为宋体,英文字体为 times new roman sns.set(font"SimSun", style"ticks", fo…

从零开始创建GPTs 人人都可以编写自己的ChatGPT产品

在这个人工智能迅猛发展的时代,GPT(生成式预训练变换器)已经成为一项令人兴奋的技术,它打开了创意和知识的新大门。无论你是一名编程新手、一位热爱探索的学生,还是对未来充满好奇的专业人士,GPTs都可以为你…

Win7如何修改MAC地址

MAC地址,又叫做物理地址、硬件地址,是用来定义网络设备的位置,一般情况下,MAC地址在网卡中是固定的,但不排除有人手动去修改自己的MAC地址。win7如何修改MAC地址?其实修改MAC地址的方法很简单,可以通过硬件…

【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推荐--…

[AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现

目录 关键词平台说明前言一、总体流程二、配置2.1 DCM and DEM2.2 BSWM2.2.1 Mode Notifaication Port2.2.2 Rules 2.3 service port2.3.1 做好DCM-->BSWM 和DCM -->SWC_Diag 的server port mapping2.3.2 做好BSWM ESH_ModeNotification 的server port mapping 2.4 SWC 中…

美好蕴育润康:为孕产期女性量身定制的专业营养

如今,孕产期是女性人生中特别而又重要的阶段。这段时间,孕期妈妈经常饱受许多痛苦和不适,更需要额外的关爱和呵护,以确保母婴健康。为了满足孕产期女性特殊的营养需求,美好蕴育润康应运而生,成为她们身边的…