PyQt:进度条实现(下载、复制)实时进度显示

一、实现思路

源文件:①被复制的文件(一般在客户端自身PC上);②被下载的文件;(一般在服务器上)。
缓存文件:正在粘贴/下载获取中的文件,粘贴/下载完成前,一般是不完整的缓存类文件。

在这里插入图片描述

二、代码示例(供参考,下载/复制任务执行函数省略)

import threading
import time

from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import *
from PyQt5.QtCore import pyqtSignal
from spys02 import Ui_Form_SPYS

import socket
from ftplib import FTP
import os
import glob

class ui_main(QMainWindow, Ui_Form_SPYS):
    show_progress = pyqtSignal(int)

    def __init__(self):

        super(ui_main, self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.Update_detection)
        self.show_progress.connect(self.updateProgress)

    def download_file(self):
    	'''执行下载/复制任务'''
    	pass


    def showProgress(self,remote_file: str, local_file: str):
        '''
        显示进度条
        :param remote_file: 被下载的文件
        :param local_file: 保存在本地的文件
        :return:
        '''
        #进度条对话框
        self.progress = QProgressDialog("从服务器下载中...", "取消", 0, 100, self)
        self.progress.setWindowTitle('进度')
        self.progress.setAutoClose(True)
        self.progress.setAutoReset(True)
        self.progress.setMinimumDuration(0)
        self.progressValue = 0
        #执行下载任务
        t = threading.Thread(target=lambda:self.download_file(remote_file,local_file))
        t.start()
        #更新下载进度条
        while t.is_alive():
            QApplication.processEvents()  # 处理其他事件
            self.show_progress.emit(1)
            time.sleep(0.5)
        self.progress.setValue(100)  # 确保进度达到100

        # 下载/复制完成提示
        c = QMessageBox.question(self, '更新', f'{remote_file}下载完成,是否打开?', QMessageBox.Yes | QMessageBox.No,
                                 QMessageBox.No)


    def updateProgress(self):
        #根据待下载.exe的大小与本地正在下载的.exe大小,更新下载进度
        local_file_size = self.get_local_file_size(local_file)
        remote__file_size = self.get_local_file_size(remote_file)
        progressValue = int((local_file_size / remote__file_size ) * 100)
        self.progress.setValue(progressValue)

    def get_local_file_size(self,file_path):
    
        '''
        获取本地文件大小
        :param file_path:
        :return: .exe文件大小
        '''
        if os.path.isfile(file_path):
            file_size = os.path.getsize(file_path)
            return file_size/1024
        else:
            return 0
     def get_ftp_file_size(self,file_path):
        '''
        获取ftp服务器上文件的大小的方式
        :param file_path:
        :return:
        '''
        size = self.ftp.size(file_path)
        return size/1024

    

if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = ui_main()
    window.show()
    sys.exit(app.exec_())

三、系列文章参考

《PyQt程序:实现新版本的自动更新检测及下载(FTP服务器实现)》

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

什么是CE认证?

目录 一、什么是CE认证? 二、CE认证对于企业来说有什么重要性? 三、企业在申请CE认证时,需要满足哪些条件和要求? 一、什么是CE认证? CE认证,即只限于产品不危及人类、动物和货品的安全方面的基本安全要…

鸿蒙内核源码分析(信号消费篇) | 谁让CPU连续四次换栈运行

本篇有相当的难度,涉及用户栈和内核栈的两轮切换,CPU四次换栈,寄存器改值,将围绕下图来说明. 解读 为本篇理解方便,把图做简化标签说明: user:用户空间kernel:内核空间source(…):源函数sighandle(…):信号处理函数&a…

炫酷Chrome:插件大礼包

Chrome浏览器以其强大的功能和丰富的扩展插件库而闻名。 其中,有些插件专为提升用户的浏览体验而设计,例如更换Chrome网页背景图、自定义鼠标点击样式,以及提供便捷的页面跳转工具等。 最近,有一款被称为“宝藏插件包”的工具引…

【软考】模拟考卷错题本2024-05-07

1 项目路径 这里的图没有加载出来,没u哦i关系了。其实主要是的算出最长的路径中包含那些元素即可。这里是蒙圈了,没有考虑到还有更长的。要顾头也顾尾。 2 算法分析-贪心 该问题主要考核的是算法设计策略来达到目标的方式。主要的设计策略有:…

文件加密软件排行榜前四名|好用的四款文件加密软件分享

在数据泄露事件频发的今天,文件加密软件成为了保护个人隐私与企业信息安全的必备工具。 选择一款高效、可靠且易用的加密软件至关重要。 本文精选了当前市场上备受好评的十款文件加密软件,旨在为您在数据保护之旅中提供方向。 1.域智盾 域智盾软件是一…

智慧养老解决方案

PART 1 行业背景及发展趋势 数字看中国人口老龄化 第七次全国人口普查数据显示,我国老年人口总量高达2.64亿人,其中60岁以上人群占比提高至18.7%,65岁以上人群占比提高至13.5%。 据统计,到2050年&#…

为 Flutter 应用设置主题:ThemeData 和 ColorScheme 指南

在媒体和其他来源中有许多关于这个主题的文章,那么这篇文章的必要性是什么? 在本文中,我计划仅关注 ThemeData 小部件的关键点以及我的开发经验中最常用的参数,并且您将获得有关每个参数如何对您的应用程序执行操作的简要说明。 …

2023年谷歌拒了228万应用,禁了33.3万账号,开发者们应如何应对2024的挑战?

谷歌在上周一公布了去年如何应对恶意应用和恶意行为。 报告指出,去年谷歌在Google Play平台上,通过不断升级安全系统、更新政策规定、运用先进的机器学习技术,以及严格把关应用审核流程,成功阻止了高达228万个不合规的应用程序上架…

人工智能|推荐系统——工业界的推荐系统之重排

一、相似性的度量 基于物品属性标签 基于物品向量表征 ⽤召回的双塔模型学到的物品向量(不好) 基于内容的向量表征(好) 二、Maximal Marginal Relevance (MMR) 三、重排的规则 最多连续出现𝑘 篇某种笔记 每&#x…

js如何控制一次只加载一张图片,加载完成后再加载下一张

公众号:程序员白特,欢迎一起交流学习~ 原文:https://juejin.cn/post/7340167256267391012 今天看到一个面试题,是关于img图片加载方面的,有必要记录一下。其实关于这个问题,只要知道图片什么时候加载完成就…

(自适应手机端)物流运输快递仓储网站模板 - 带三级栏目

(自适应手机端)物流运输快递仓储网站模板 - 带三级栏目PbootCMS内核开发的网站模板,该模板适用于物流运输网站、仓储货运网站等企业,当然其他行业也可以做,只需要把文字图片换成其他行业的即可;自适应手机端,同一个后台…

3D模型实时变形算法

最近,在尝试渲染一些奇怪的形状后,我陷入了计算机图形学的困境。事实证明,对于我试图解决的具体问题,没有现有的选项完全适合我想要做的事情。几周后,我终于带着一些答案再次浮出水面,写了很多行代码&#…

3.yolov5训练前的图片处理详解(python)

其实,yolov5模型可以分为深度网络、数据处理(图片处理)、损失函数、优化器选择、训练和预测及部分构成,相信大家对训练和预测的代码比较熟悉。前面两章我们根据代码和结构图了解了yolov5的深度网络,接下来看数据处理的…

Spring中FactoryBean的作用和实现原理

Spring中FactoryBean的作用和实现原理 BeanFactory与FactoryBean,相信很多刚翻看Spring源码的同学跟我一样很好奇这俩货怎么长得这么像,分别都是干啥用的。 BeanFactory是Spring中Bean工厂的顶层接口,也是我们常说的SpringIOC容器&#xff…

Android广播机制简介

文章目录 Android广播机制简介广播的基本概念广播的类型广播的使用场景Android广播的优缺点优点缺点 使用Android广播的一些最佳实践: Android广播机制简介 Android广播是一种轻量级的消息传递机制,用于应用程序之间或系统与应用程序之间进行通信。它类似于订阅-发…

ENG-2 AM,129423-53-6主要用于检测生物体系中的Na+浓度

引言:在化学研究的海洋中,优质的化学试剂是实验成功的关键。今天,我要为大家分享一款备受好评的化学试剂——ENG-2。这款试剂以其独特的性能和广泛的应用领域,赢得了众多科研人员的青睐。 中文名称:钠离子荧光探针ENG-…

[leetcode] 68. 文本左右对齐

文章目录 题目描述解题方法贪心java代码复杂度分析 题目描述 给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词&#xff…

运用远期交易防范外汇风险

随着全球化的深入,跨境贸易和投资愈加频繁,外汇风险成为各类企业和投资者必须面对的现实问题。汇率的波动可能导致交易和投资的成本大幅增加,甚至引发利润损失。在这种情况下,远期交易作为一种有效的外汇风险对冲工具,…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷1(私有云)

#需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包及镜像)或有问题的,可私聊博主!!! #需要资源(软件包…

源代码加密

代码加密,特别是源代码加密,是一种安全措施,旨在保护软件的源代码不被未授权访问或泄露。源代码是软件应用程序的原始编程文本,它包含了程序的逻辑、算法和设计思想。由于源代码包含了软件的核心知识,因此它具有极高的…