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

news2024/12/25 15:34:24

一、实现思路

源文件:①被复制的文件(一般在客户端自身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.coloradmin.cn/o/1653512.html

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

相关文章

Pytorch学习笔记——卷积操作

一、认识卷积操作 卷积操作是一种数学运算,它涉及两个函数:输入函数(通常是图像)和卷积核(也称为滤波器或特征检测器)。卷积核在输入函数上滑动,将核中的每个元素与其覆盖的输入函数区域中的对应…

基于ConvNeXt网络的图像识别

1、前言 ConvNeXt 网络基于传统的卷积神经网络,与当下 transformer当道而言简直是一股清流 ConvNeXt并没有特别复杂或者创新的结构 ConvNeXt 网络有五种大小,可以参考下面 2、项目实现 完整的项目如下: 这里参考了网上的ConvNeXt 模型&…

揭秘App如何翻倍广告收益:科学变现的秘诀

在数字时代,移动应用(App)已成为日常生活的一部分。无论是娱乐、教育还是工具类应用,它们为用户提供了便捷的服务。然而,许多App开发者面临一个共同的挑战:如何在免费的基础上实现盈利?答案之一…

生产制造中刀具管理系统,帮助工厂不再频繁换刀

一、刀具管理的定义与重要性 刀具管理是指对生产过程中使用的各种刀具进行计划、采购、存储、分配、使用、监控、维修和报废等全过程的管理。刀具作为制造过程中的直接工具,其性能、质量和使用效率直接影响产品的加工精度、表面质量和生产效率。因此,建…

在全志H616核桃派1B开发板Python进行GPIO按键功能实现

前言​ 按键是最简单也最常见的输入设备,很多产品都离不开按键,包括早期的iPhone,今天我们就来学习一下如何使用Python来编写按键程序。有了按键输入功能,我们就可以做很多好玩的东西了。 实验目的​ 编程实现按键输入检测。 …

Shell变成规范与变量

目录 1. Shell脚本 1.1 Shell脚本概述 1.2 Shell的作用 1.3 Shell脚本的构成 2. 重定向与管道操作 2.1 交互式硬件设备 ​ 2.2 重定向操作 3. shell变量 3.1 自定义变量 3.2 变量的作用范围​编辑 3.3 整数变量的运算 4. 环境变量 4.1 特殊的Shell变量 4.2 只读变…

SWAT模型【建模方法、实例应用、高级进阶技能】实践

第一部分:SWAT模型实践部分 一、SWAT模型及应用介绍 1.1 面源污染概要 1.2 SWAT模型及应用 1.3 SWAT模型原理 1.4 SWAT模型输入文件 1.5 ArcGIS与SWAT关系 二、SWAT模型中GIS必备技术 2.1 GIS软件平台 2.2 ArcGIS10.6安装和注意事项 2.3 ArcGIS入门 2.…

【如此简单!数据库入门系列】之无序不代表混乱 -- 堆文件

文章目录 前言堆文件链表实现页目录实现总结系列文章 前言 还记得上次遗留的问题吗? 以什么组织方式将数据保存在磁盘中? 今天我们接着讨论这个问题。 首先想一个问题:有一天,你开着自己心爱的大型SUV去超市购物。在停车场入口看…

Python中tkinter编程入门1

1 tkinter库简介 tkinter是Python的标准库,用来进行GUI(Graphical User Interface,图形用户界面)编程。 2 导入tkinter库 tkinter是Python默认的GUI库,因此,IDLE中已经包含了该库,使用时无需…

爱奇艺文娱知识图谱的构建与应用实践

2012年5月,Google发布了知识图谱(Knowledge Graph),以提升搜索引擎返回的答案质量和用户查询的效率。有了知识图谱作为辅助,搜索引擎能够洞察用户查询背后的语义信息,返回更为精准、结构化的信息,更大可能地满足用户的…

抖音小店怎么运营?最全的运营攻略来了?

大家好,我是电商糖果 很多开好店铺的小伙伴,都会遇到一个难题,那就是不会运营店铺。 可能好几个月才出十几单,甚至体验分都没有弄出来。 说实话,这种情况糖果见多了。 糖果做抖音小店也有四年多了,也开…

STM32F1#1(入门了解)

一、STM32开发平台和工具 1.1 STM32芯片介绍 典型微控制器由CPU(运算器、控制器)、RAM、ROM和输入输出组成。 1.2 STM32核心板 STM32核心板配件: ①JTAG/SWD仿真-下载器 ②通信-下载模块 ③OLED显示屏 1) 通信-下载模…

uniapp 小程序图片懒加载组件 ImageLazyLoad

预览图 组件【ImageLazyLoad】代码 <template><viewclass"image-lazy-load":style"{opacity: opacity,borderRadius: borderRadius rpx,background: background,transition: opacity ${time / 1000}s ease-in-out,}":class"image-lazy-loa…

请大数据把我推荐给正在申请小程序地理位置接口的人

小程序地理位置接口有什么功能&#xff1f; 若提审后被驳回&#xff0c;理由是“当前提审小程序代码包中地理位置相关接口( chooseAddress、getLocation )暂未开通&#xff0c;建议完成接口开通后或移除接口相关内容后再进行后续版本提审”&#xff0c;那么遇到这种情况&#x…

Python程序设计 函数(三)

练习十一 函数 第1关&#xff1a; 一元二次方程的根 定义一个函数qg&#xff0c;输入一元二次方程的系数a,b,c 当判别式大于0&#xff0c;返回1和两个根 当判别式等于0&#xff0c;返回0和两个根 当判别式小于0&#xff0c;访问-1和两个根 在主程序中&#xff0c;根据函数返回…

c 双向链表

图片 #include <stdio.h> #include <stdlib.h> #include <string.h>int main(void){ struct film{char name[20];int id;struct film *pre; //前向指针struct film *next; //后向指针 };struct film *headNULL;struct film *ls,*lspre,*work;in…

微信小程序16: 组件通信

父子组件之间的通信 父子组件通信一共有三种方式 属性绑定 用于父组件向子组件的指定属性设置数据&#xff0c;仅能设置JSON兼容的数据 事件绑定 用于子组件向父组件传递数据&#xff0c;可以传递任意数据 获取组件实例 父组件还可以通过this.selectComponent()获取子组件的实…

【C++】:模板初阶

目录 一&#xff0c;泛型编程二&#xff0c;函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 三&#xff0c;类模板3.1 类模板的定义格式3.2 类模板的实例化 一&#xff0c;泛型编程 在C语言中如何实现一个通用的交换…

在Leaflet中点对象使用SVG和Canvas两种模式的对比

目录 前言 一、关于SVG和Canvas 1、SVG知识 2、Canvas知识 3、优缺点 二、SVG和Canvas在Leaflet的使用 1、相关类图 2、Leaflet的默认展示方式 三、SVG和Canvas实例及性能对比 1、SVG模式及性能对比 2、Canvas优化 总结 前言 众所周知&#xff0c;在Leaflet当中&#…

我独自升级下载 我独自升级崛起一键下载安装

近期&#xff0c;动画《我独自升级》凭借其高涨的人气&#xff0c;迅速席卷了各大平台&#xff0c;其热度非凡。乘着这股风潮&#xff0c;韩国知名厂商网石集团火速推出了同名游戏力作《我独自升级&#xff1a;ARISE》&#xff0c;让众多粉丝得以跨越次元壁垒&#xff0c;亲自投…