添加下载模板功能

This commit is contained in:
2025-06-29 00:06:47 +08:00
parent 9d703212ef
commit 375ea9a686
16 changed files with 143 additions and 20 deletions

View File

@@ -1,18 +1,43 @@
from functools import wraps
from typing import Literal, Callable
from PySide6.QtCore import Qt, Signal, QThread
from PySide6.QtWidgets import QHBoxLayout, QVBoxLayout, QFileDialog, QButtonGroup, QWidget
from PySide6.QtCore import Qt, Signal, QThread, QEvent
from PySide6.QtWidgets import QHBoxLayout, QVBoxLayout, QFileDialog, QButtonGroup, QWidget, QApplication
from qfluentwidgets import GroupHeaderCardWidget, PushButton, IconWidget, BodyLabel, PrimaryPushButton, FluentIcon, \
LineEdit, RadioButton
LineEdit, RadioButton, HyperlinkButton, FlyoutViewBase, TeachingTipView, TeachingTip, TeachingTipTailPosition
from module.worker import DTGWorker
from ui import MAIN_THEME_COLOR
from ui.components.infobar import ProgressInfoBar
from ui.components.widget import Widget
from ui.components.widget import Widget, MyGroupHeaderCardWidget
from utils.function import open_template
class InitSettingCard(GroupHeaderCardWidget):
class ChooseTemplateView(FlyoutViewBase):
closed = Signal()
def __init__(self, parent=None):
super().__init__(parent)
self.vBoxLayout = QVBoxLayout(self)
QApplication.instance().installEventFilter(self)
def paintEvent(self, e):
...
def eventFilter(self, watched, event):
if event.type() == QEvent.MouseButtonPress:
if not self.rect().contains(self.mapFromGlobal(event.globalPosition().toPoint())):
self.closed.emit()
return super().eventFilter(watched, event)
def addTemplate(self, content: str, cb: Callable[[], None]):
label = HyperlinkButton("", content)
self.vBoxLayout.addWidget(label)
label.clicked.connect(cb)
label.clicked.connect(self.closed.emit)
class InitSettingCard(MyGroupHeaderCardWidget):
chooseSignal = Signal(str, str)
def __init__(self, parent=None):
@@ -21,19 +46,29 @@ class InitSettingCard(GroupHeaderCardWidget):
self.setTitle("输入选项")
self.setBorderRadius(8)
self.sBtnHBoxLayout = QHBoxLayout(self)
self.qBtnHBoxLayout = QHBoxLayout(self)
self.sTemplateButton = HyperlinkButton("", "下载模板")
self.chooseStudentButton = PushButton("打开")
self.qTemplateButton = HyperlinkButton("", "下载模板")
self.chooseQuestionButton = PushButton("打开")
self.chooseStudentButton.setFixedWidth(120)
self.chooseQuestionButton.setFixedWidth(120)
self.sBtnHBoxLayout.addWidget(self.sTemplateButton)
self.sBtnHBoxLayout.addWidget(self.chooseStudentButton)
self.qBtnHBoxLayout.addWidget(self.qTemplateButton)
self.qBtnHBoxLayout.addWidget(self.chooseQuestionButton)
self.stuGroup = self.addGroup(FluentIcon.DOCUMENT, "学生名单", "选择学生名单文件", self.chooseStudentButton)
self.QueGroup = self.addGroup(FluentIcon.DOCUMENT, "题库", "选择题库文件", self.chooseQuestionButton)
self.stuGroup = self.addGroup(FluentIcon.DOCUMENT, "学生名单", "选择学生名单文件", self.sBtnHBoxLayout)
self.QueGroup = self.addGroup(FluentIcon.DOCUMENT, "题库", "选择题库文件", self.qBtnHBoxLayout)
self.chooseStudentButton.clicked.connect(
lambda: self.choose_file(self.stuGroup.setContent, "已选择文件:", lambda x: self.chooseSignal.emit('s', x)))
self.chooseQuestionButton.clicked.connect(
lambda: self.choose_file(self.QueGroup.setContent, "已选择文件:", lambda x: self.chooseSignal.emit('q', x)))
self.qTemplateButton.clicked.connect(lambda: open_template('template-defense-paper-questions.xlsm', self))
self.sTemplateButton.clicked.connect(self.show_template_list_view)
def choose_file(
self,
@@ -47,6 +82,19 @@ class InitSettingCard(GroupHeaderCardWidget):
if cb:
cb(file_path)
def show_template_list_view(self):
view = ChooseTemplateView(self)
view.addTemplate("普通模板", lambda: open_template("template-defense-paper-student-1.xlsm", self))
view.addTemplate("达成度模板", lambda: open_template("template-defense-paper-student-2.xlsm", self))
w = TeachingTip.make(
target=self.sTemplateButton,
view=view,
tailPosition=TeachingTipTailPosition.TOP,
duration=-1,
parent=self
)
view.closed.connect(w.close)
class ExportSettingsCard(GroupHeaderCardWidget):
startSignal = Signal()