pyqt进度条用多线程

 

import os, sys

from PyQt5 import QtCore

import untitled
from PyQt5.QtCore import QBasicTimer, QThread
from PyQt5.QtWidgets import QDialog, QApplication
import win32api, win32con
import shutil


class MainDialog(QDialog):

def __init__(self):

super(QDialog, self).__init__()
self.ui1 = untitled.Ui_Dialog()
self.ui1.setupUi(self)

# self.time = QBasicTimer()
# self.timeid = self.time.start(100, self)
self.Threadclass = Threadclass()
self.Threadclass.start()
self.Threadclass.signal_time.connect(self.updateprogressBarandlabel)


def updateprogressBarandlabel(self, file,val):
self.ui1.label.setText(file)
self.ui1.progressBar.setValue(val)
# #这是在网上搜的说进度条循环的,但是如果有进程一样会卡死
# def timerEvent(self, e):
# # try:
# self.ui1.label.setText(self.del_list[self.f])
# if (self.f + 1) >= len(self.del_list):
# if len(self.delsuccess) == 0:
# win32api.MessageBox(0, "没有成功删除文件" + str(self.del_list[self.f]) + ",请联系信息部", "提醒", win32con.MB_OK)
# sys.exit(0)
# else:
# win32api.MessageBox(0, "成功删除" + self.delsuccess.__str__(), "提醒", win32con.MB_OK)
# sys.exit(0)
#
# self.ui1.progressBar.setValue(int((self.f + 1) / (self.dellistsize) * 100))
#
# # except BaseException as e:
# # print(e)
# # sys.exit(0)
#
# def work(self):
#
# if os.path.exists(self.filepath):
# if os.listdir(self.filepath):
# self.dellistsize = len(self.del_list)
# for self.f in range(0, self.dellistsize):
# if self.del_list[self.f] == "Program Files" or self.del_list[self.f] == "Program Files(X86)":
# win32api.MessageBox(0, "系统文件无法删除", "提醒", win32con.MB_OK)
# else:
# try:
# file_path = os.path.join(self.filepath, self.del_list[self.f])
# if os.path.isfile(file_path):
# os.remove(file_path)
# elif os.path.isdir(file_path):
# shutil.rmtree(file_path)
# self.delsuccess.append(file_path)
# except BaseException as e:
# win32api.MessageBox(0, str(e), "提醒", win32con.MB_OK)
#
#
#
#
# else:
# win32api.MessageBox(0, "文件不存在", "提醒", win32con.MB_OK)


class Threadclass(QThread):
signal_time = QtCore.pyqtSignal(str, int) # 信号

def __init__(self, parent=None):
super(Threadclass, self).__init__(parent)
self.filepath = "C:/BACKUP"
self.delsuccess = []
self.f = 0


if os.path.exists(self.filepath):
try:
if not os.listdir(self.filepath):
win32api.MessageBox(0, "升级备份文件为空,不需要删除", "提醒", win32con.MB_OK)
self.exec()
else:
self.del_list = os.listdir(self.filepath)
print(1)
except BaseException as e:
# win32api.MessageBox(0, str(e), "提醒", win32con.MB_OK)
print(e)
else:
win32api.MessageBox(0, "没有要删的文件,直接关闭就好", "提醒", win32con.MB_OK)
if os.path.exists(self.filepath):
if os.listdir(self.filepath):
self.dellistsize = len(self.del_list)
for self.f in range(0, self.dellistsize):
# 发送信号
self.signal_time.emit(self.del_list[self.f], int((self.f + 1) / (self.dellistsize) * 100))
if self.del_list[self.f] == "Program Files" or self.del_list[self.f] == "Program Files(X86)":
win32api.MessageBox(0, "系统文件无法删除", "提醒", win32con.MB_OK)
else:
try:
file_path = os.path.join(self.filepath, self.del_list[self.f])
if os.path.isfile(file_path):
os.remove(file_path)
elif os.path.isdir(file_path):
shutil.rmtree(file_path)
self.delsuccess.append(file_path)
except BaseException as e:
win32api.MessageBox(0, str(e), "提醒", win32con.MB_OK)
if len(self.delsuccess) == 0:
win32api.MessageBox(0, "如果这是您第二次运行,看到词条消息表面已经删除成功了。如果是第一次运行此程序,则表明没有成功删除文件" + str(self.del_list[self.f]) + ",请联系信息部", "提醒", win32con.MB_OK)
self.exec()
else:
win32api.MessageBox(0, "成功删除" + self.delsuccess.__str__(), "提醒", win32con.MB_OK)
self.exec()
else:
win32api.MessageBox(0, "文件不存在", "提醒", win32con.MB_OK)



if __name__ == '__main__':
myapp = QApplication(sys.argv)
# 创建启动界面,支持png透明图片
myDlg = MainDialog()
myDlg.show()
# myDlg.work()
sys.exit(myapp.exec_())
# pyinstaller -F -i 顶立科技.ico -n "清除绿盾升级文件" -w 1.py

 

posted @ 2022-03-27 20:45  老运维  阅读(412)  评论(0)    收藏  举报