Skip to content

Instantly share code, notes, and snippets.

@allrobot
Created April 14, 2023 11:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save allrobot/3a6449b4389a1e28a907702d38d7422b to your computer and use it in GitHub Desktop.
Save allrobot/3a6449b4389a1e28a907702d38d7422b to your computer and use it in GitHub Desktop.
import os
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import Script
from Vam_Dialogs import InterruptDialog
from Vam_Modules import ScanPackages
class ShowProgressBar(QWidget):
def __init__(self, MaxNumber: int,worker):
super().__init__()
self.worker=worker
# 窗口设置
self.setFixedSize(350, 60)
self.setWindowTitle('进度条')
self.setWindowModality(Qt.WindowModal)
self.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowTitleHint)
# 输出框信息
self.label = QLabel()
self.labelText = '正在处理,请稍候...'
self.label.setText(self.labelText)
# Cancel
self.button=QPushButton('取消')
self.button.clicked.connect(self.close)
# 进度条设置
self.total_files = MaxNumber
self.processed_files = 0
# 进度条对话框设置
self.progress_bar()
def progress_bar(self):
self.progressBar = QProgressBar(self)
self.progressBar.setTextVisible(True)
self.progressBar.setMaximum(self.total_files)
self.progressBar.setMinimum(self.processed_files)
self.progressBar.setValue(0)
hbox1 = QHBoxLayout()
hbox1.addWidget(self.progressBar, alignment=Qt.AlignTop)
hbox2 = QHBoxLayout()
hbox2.addWidget(self.label, alignment=Qt.AlignTop)
hbox2.addWidget(self.button, alignment=Qt.AlignTop)
vbox = QVBoxLayout(self)
vbox.addLayout(hbox1)
vbox.addLayout(hbox2)
self.setLayout(vbox)
self.show()
def update_progress_bar(self, num: int):
self.progressBar.setValue(num)
self.label.setText(f'第{num}文件/{self.total_files}个var文件')
def close(self) :
self.worker.quit()
self.progress_close()
def progress_close(self):
self.close()
def keyPressEvent(self, event):
if event.key():
event.ignore()
@pyqtSlot(str)
def show_dialog(self,text: str):
self.dialog = InterruptDialog.InterruptProcessing(text)
self.dialog.quit_interrupt.connect(self.dialog.close)
self.dialog.retry.connect(self.worker.resume)
self.dialog.ignored.connect(self.worker.ignore)
self.dialog.cancel.connect(progress_bar.progress_close)
self.dialog.cancel.connect(self.worker.quit)
@pyqtSlot(bool,bool, str)
def finished_dialog(error: bool,custom:bool, text: str):
dialog = Script.finished_operation(error,custom, text)
@pyqtSlot(str)
def show_custom_dialog(text: str):
dialog = Script.show_custom_dialog(text)
'''输出依赖'''
QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)
app = QApplication(sys.argv)
worker = ScanPackages.Worker(r'I:\VAM\Vam Pure\AddonPackages')
progress_bar = ShowProgressBar(worker.exist_vars_path.__len__(),worker)
worker.intReady.connect(progress_bar.update_progress_bar)
worker.started.connect(worker.scan_meta_json)
worker.showdialog.connect(worker.pause)
worker.showdialog.connect(progress_bar.show_dialog)
worker.finished.connect(progress_bar.progress_close)
worker.start()
app.exec_()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment