From cd5a0f44c7b6c852f3406346bba4ad0c306f5159 Mon Sep 17 00:00:00 2001 From: Jeffrey Hsu Date: Sun, 29 Jun 2025 02:27:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=AD=94=E8=BE=A9=E9=A2=98?= =?UTF-8?q?=E7=9B=AE=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/pyui/defense_ui.py | 62 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/ui/pyui/defense_ui.py b/ui/pyui/defense_ui.py index cb5e7c2..4756070 100644 --- a/ui/pyui/defense_ui.py +++ b/ui/pyui/defense_ui.py @@ -2,9 +2,10 @@ from functools import wraps from typing import Literal, Callable from PySide6.QtCore import Qt, Signal, QThread, QEvent -from PySide6.QtWidgets import QHBoxLayout, QVBoxLayout, QFileDialog, QButtonGroup, QWidget, QApplication +from PySide6.QtWidgets import QHBoxLayout, QVBoxLayout, QFileDialog, QButtonGroup, QWidget, QApplication, QStackedWidget from qfluentwidgets import GroupHeaderCardWidget, PushButton, IconWidget, BodyLabel, PrimaryPushButton, FluentIcon, \ - LineEdit, RadioButton, HyperlinkButton, FlyoutViewBase, TeachingTip, TeachingTipTailPosition + LineEdit, RadioButton, HyperlinkButton, FlyoutViewBase, TeachingTip, TeachingTipTailPosition, SegmentedWidget, \ + SimpleCardWidget, DisplayLabel from module.worker import DTGWorker from ui import MAIN_THEME_COLOR @@ -169,15 +170,16 @@ class ExportSettingsCard(GroupHeaderCardWidget): self.updateSignal.emit('n', f_name) -class DefenseWidget(Widget): +class DPMode(QWidget): errorSignal = Signal(str, str) - def __init__(self, key: str, parent=None): - super().__init__(key, parent) + def __init__(self, parent=None): + super().__init__(parent) self.initCard = InitSettingCard(self) self.exportCard = ExportSettingsCard(self) self.vbox = QVBoxLayout(self) + self.vbox.setContentsMargins(0, 0, 0, 0) self.vbox.addWidget(self.initCard) self.vbox.addWidget(self.exportCard) @@ -301,3 +303,53 @@ class DefenseWidget(Widget): def show_error(self, title: str, content: str): self.errorSignal.emit(title, content) + + +class DOMode(SimpleCardWidget): + def __init__(self, parent=None): + super().__init__(parent) + self.vbox = QVBoxLayout(self) + self.vbox.setContentsMargins(0, 0, 0, 0) + + self.label = DisplayLabel("🚧", self) + self.label.setAlignment(Qt.AlignCenter) + + self.vbox.addStretch(1) + self.vbox.addWidget(self.label) + self.vbox.addStretch(1) + + +class DefenseWidget(Widget): + errorSignal = Signal(str, str) + + def __init__(self, key: str, parent=None): + super().__init__(key, parent) + + self.vbox = QVBoxLayout(self) + self.stack = QStackedWidget(self) + self.menu = SegmentedWidget(self) + self.dpMode = DPMode(self) + self.doMode = DOMode(self) + + self.addSubInterface(self.dpMode, 'DPMode', '书面答辩') + self.addSubInterface(self.doMode, 'DOMode', '口头答辩') + + self.menu.setCurrentItem('DPMode') + self.vbox.addWidget(self.menu) + self.vbox.addWidget(self.stack) + self.vbox.addStretch(1) + + def addSubInterface(self, widget: QWidget, objectName: str, text: str): + widget.setObjectName(objectName) + self.stack.addWidget(widget) + + # 使用全局唯一的 objectName 作为路由键 + self.menu.addItem( + routeKey=objectName, + text=text, + onClick=lambda: self.stack.setCurrentWidget(widget) + ) + + def onCurrentIndexChanged(self, index): + widget = self.stack.widget(index) + self.menu.setCurrentItem(widget.objectName())