合并达成度功能

This commit is contained in:
2025-05-20 18:30:00 +08:00
parent 8d063fd08a
commit 0a9bd74d8e
20 changed files with 14934 additions and 47 deletions

View File

@@ -4,7 +4,7 @@ from functools import wraps
from PySide6.QtCore import Qt, Signal, QThread
from PySide6.QtWidgets import QHBoxLayout, QVBoxLayout, QFileDialog
from qfluentwidgets import GroupHeaderCardWidget, PushButton, IconWidget, InfoBarIcon, \
BodyLabel, PrimaryPushButton, FluentIcon, LineEdit, InfoBar, InfoBarPosition, ProgressBar
BodyLabel, PrimaryPushButton, FluentIcon, LineEdit, InfoBar, InfoBarPosition, ProgressBar, IndeterminateProgressBar
from module.worker import DTGWorker
from ui.components.widget import Widget
@@ -16,7 +16,7 @@ class InitSettingCard(GroupHeaderCardWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setTitle("初始化")
self.setTitle("输入选项")
self.setBorderRadius(8)
self.chooseStudentButton = PushButton("打开")
@@ -53,7 +53,7 @@ class ExportSettingsCard(GroupHeaderCardWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.setTitle("导出")
self.setTitle("输入选项")
self.setBorderRadius(8)
self.chooseExportDirectoryButton = PushButton("选择")
@@ -100,14 +100,16 @@ class ExportSettingsCard(GroupHeaderCardWidget):
def update_export_setting_by_signal(self, path: str) -> None:
f_dir = path[:path.rfind('/')]
f_name = path[path.rfind('/') + 1:path.rfind('.')]
f_name = path[path.rfind('/') + 1:path.rfind('.')] + '-答辩题目'
self.dirGroup.setContent(f"当前保存的文件目录:{f_dir}")
self.updateSignal.emit('d', f_dir)
self.exportFileNameLineEdit.setText(f"{f_name}-答辩题目")
self.exportFileNameLineEdit.setText(f_name)
self.updateSignal.emit('n', f_name)
class DefenseWidget(Widget):
errorSignal = Signal(str, str)
def __init__(self, key: str, parent=None):
super().__init__(key, parent)
@@ -125,6 +127,8 @@ class DefenseWidget(Widget):
self.thread = None
self.worker = None
self.successFlag = True
# ===================================
self.input_student_filepath = None
@@ -157,17 +161,21 @@ class DefenseWidget(Widget):
self.pb.setValue(value)
if value == 100:
self.infoBar.close()
self.infoBar = InfoBar.success(
title='成功!',
content="正在打开文件...",
self.infoBar = InfoBar(
icon=InfoBarIcon.INFORMATION,
title='正在转换文件',
content="",
orient=Qt.Horizontal,
isClosable=True,
isClosable=False,
position=InfoBarPosition.BOTTOM,
duration=5000,
duration=-1,
parent=self
)
self.infoBar.addWidget(IndeterminateProgressBar(start=True))
self.infoBar.show()
self.pb = None
self.exportCard.startButton.setEnabled(True)
elif value == -1:
self.successFlag = False
def enable_start_check(func: Callable):
@wraps(func)
@@ -198,7 +206,6 @@ class DefenseWidget(Widget):
self.output_filepath = value
elif key == "output_filename":
self.output_filename = value
setattr(self, key, value)
def input_signal_receive(self, s_type: Literal['s', 'q'], value: str):
if s_type == "s":
@@ -224,16 +231,19 @@ class DefenseWidget(Widget):
self.worker.moveToThread(self.thread)
self.show_info_bar()
self.successFlag = True
self.exportCard.startButton.setEnabled(False)
# 线程启动与信号连接
self.thread.started.connect(self.worker.run)
self.worker.progress.connect(self.set_pb_value)
self.worker.error.connect(self.show_error)
self.worker.finished.connect(self.thread.quit)
self.worker.finished.connect(self.worker.deleteLater)
self.thread.finished.connect(self.thread.deleteLater)
self.thread.finished.connect(self.clear_thread_worker_refs)
self.thread.finished.connect(self.after_generate)
# 启动线程
self.thread.start()
@@ -241,3 +251,30 @@ class DefenseWidget(Widget):
def clear_thread_worker_refs(self):
self.thread = None
self.worker = None
def after_generate(self):
self.exportCard.startButton.setEnabled(True)
self.infoBar.close()
if self.successFlag:
self.infoBar = InfoBar.success(
title='成功!',
content="正在打开文件...",
orient=Qt.Horizontal,
isClosable=True,
position=InfoBarPosition.BOTTOM,
duration=5000,
parent=self
)
else:
self.infoBar = InfoBar.error(
title='失败!',
content="",
orient=Qt.Horizontal,
isClosable=True,
position=InfoBarPosition.BOTTOM,
duration=5000,
parent=self
)
def show_error(self, title: str, content: str):
self.errorSignal.emit(title, content)