PyQt5笔记——基于QThread的zip文件解压线程

前言

  • 本文基于QThread封装了一个zip文件解压的线程类
  • 技术实现:QTread多线程+pyqtSignal信号+zipfile解压

代码实现

  • 代码如下:
import zipfile
import os
from tqdm import tqdm
from PyQt5.QtCore import QThread, pyqtSignal

class UnzipQThread(QThread):
    '''
    解压线程
    '''
    signal_unzip_process = pyqtSignal(list)  # 解压进度信号
    signal_unzip_finished = pyqtSignal(bool)  # 解压完成信号(参数表示是否异常)

    def __init__(self, zip_src, dst_dir):
        super().__init__()
        self.zip_src = zip_src
        self.dst_dir = dst_dir

    def unzip_file(self, zip_src, dst_dir):
        '''
        解压缩
        '''
        r = zipfile.is_zipfile(zip_src)
        if r:
            fz = zipfile.ZipFile(zip_src, 'r')
            total_file = len(fz.namelist())
            unzip_num = 0
            for file in fz.namelist():
                fz.extract(file, dst_dir)
                unzip_num += 1
                self.signal_unzip_process.emit([unzip_num, total_file])
            self.signal_unzip_finished.emit(True)
        else:
            print('This is not zip')
            self.signal_unzip_finished.emit(False)

    def run(self):
        self.unzip_file(self.zip_src, self.dst_dir)
  • 使用:
unzip_thread = UnzipQThread(zip_src='压缩文件路径', dst_dir='解压路径')
unzip_thread.signal_unzip_process.connect(update_process)
unzip_thread.signal_unzip_finished .connect(unzip_finished)
unzip_thread.start()  # 启动线程

def update_process(val):
	print('解压进度:',val[0],'/',val[1])

def unzip_finished(state):
	if state:
		print('解压完成')
	else:
		print('解压异常')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅若清风cyf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值