前言
- 本文基于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('解压异常')