From a2bc1881bc18305cd28db79ca47d8650bc25bed0 Mon Sep 17 00:00:00 2001
From: KenanZhu <3471685733@qq.com>
Date: Sat, 30 May 2026 21:33:59 +0800
Subject: [PATCH] =?UTF-8?q?feat(gui):=20=E6=96=B0=E5=A2=9E=E4=B8=BB?=
=?UTF-8?q?=E9=A2=98=E4=BF=A1=E6=81=AF=E6=A0=87=E7=AD=BE=EF=BC=8C=E7=A7=BB?=
=?UTF-8?q?=E9=99=A4=20custom=5Fqss=20=E5=85=BC=E5=AE=B9=EF=BC=8C=E4=BC=98?=
=?UTF-8?q?=E5=8C=96=E9=87=8D=E7=BD=AE=E6=8C=89=E9=92=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- .ui 新增 ThemeInfoLabel 用于展示主题作者和简介
- ALSettingsWidget 新增 _updateThemeInfo 方法,ComboBox 切换时更新信息
- 移除 _loadQss/_applyQss 模块函数及所有 CUSTOM_QSS 引用
- AppInitializer 移除 _applyQss 导入和回退逻辑
- ConfigProvider/ConfigManager 移除 custom_qss 键
- 纯 QSS 导入通过 ThemeManager 打包为 .altheme 统一管理
---
src/boot/AppInitializer.py | 6 +--
src/gui/ALSettingsWidget.py | 56 ++++++++++++------------
src/gui/resources/ui/ALSettingsWidget.ui | 34 ++++++++++----
src/interfaces/ConfigProvider.py | 1 -
src/managers/config/ConfigManager.py | 1 -
5 files changed, 55 insertions(+), 43 deletions(-)
diff --git a/src/boot/AppInitializer.py b/src/boot/AppInitializer.py
index a4bd884..42e6be1 100644
--- a/src/boot/AppInitializer.py
+++ b/src/boot/AppInitializer.py
@@ -15,7 +15,6 @@ from PySide6.QtWidgets import QApplication
from gui.ALSettingsWidget import (
_setActiveStyleName,
_applyTheme,
- _applyQss,
)
from interfaces.ConfigProvider import CfgKey
from managers.config.ConfigManager import instance as configInstance
@@ -80,7 +79,6 @@ def _initializeAppearance(
cfg = configInstance()
saved_style = cfg.get(CfgKey.GLOBAL.APPEARANCE.STYLE, "Fusion")
saved_theme = cfg.get(CfgKey.GLOBAL.APPEARANCE.THEME, "system")
- saved_qss = cfg.get(CfgKey.GLOBAL.APPEARANCE.CUSTOM_QSS, "")
saved_custom_theme = cfg.get(CfgKey.GLOBAL.APPEARANCE.CUSTOM_THEME, "")
app.setStyle(saved_style)
_setActiveStyleName(saved_style)
@@ -89,9 +87,7 @@ def _initializeAppearance(
from managers.theme.ThemeManager import instance as themeInstance
themeInstance().applyTheme(saved_custom_theme)
except Exception:
- _applyQss(saved_qss)
- else:
- _applyQss(saved_qss)
+ pass
_applyTheme(saved_theme)
def initializeApp(
diff --git a/src/gui/ALSettingsWidget.py b/src/gui/ALSettingsWidget.py
index 6f1c608..5ca3e91 100644
--- a/src/gui/ALSettingsWidget.py
+++ b/src/gui/ALSettingsWidget.py
@@ -69,31 +69,6 @@ def _applyThemeByName(
except Exception:
_clearQss()
-def _loadQss(
- file_path: str
-) -> str:
-
- if not file_path or not os.path.isfile(file_path):
- return ""
- try:
- with open(file_path, "r", encoding="utf-8") as fh:
- return fh.read()
- except Exception:
- return ""
-
-def _applyQss(
- file_path: str
-):
-
- app : QApplication | None = QApplication.instance()
- if not app:
- return
- qss = _loadQss(file_path)
- if qss:
- app.setStyleSheet(qss)
- else:
- _clearQss()
-
def _applyTheme(
theme: str
):
@@ -173,6 +148,7 @@ class ALSettingsWidget(QWidget, Ui_ALSettingsWidget):
):
self.BrowseQssButton.clicked.connect(self.onImportThemeButtonClicked)
+ self.ThemeComboBox.currentTextChanged.connect(self.onThemeComboBoxChanged)
self.ResetQssButton.clicked.connect(self.onResetQssButtonClicked)
self.CancelButton.clicked.connect(self.onCancelButtonClicked)
self.ApplyButton.clicked.connect(self.onApplyButtonClicked)
@@ -233,6 +209,7 @@ class ALSettingsWidget(QWidget, Ui_ALSettingsWidget):
if idx >= 0:
self.ThemeComboBox.setCurrentIndex(idx)
self.updateThemeStatus()
+ self._updateThemeInfo()
def updateThemeStatus(
self
@@ -240,9 +217,25 @@ class ALSettingsWidget(QWidget, Ui_ALSettingsWidget):
name = self.ThemeComboBox.currentText()
if name and name != "默认":
- self.QssStatusLabel.setText(f"已加载主题:{name}")
+ self.QssStatusLabel.setText(f"当前使用 {name} 主题。")
else:
- self.QssStatusLabel.setText("当前使用程序默认外观。")
+ self.QssStatusLabel.setText("当前使用 默认 主题。")
+
+ def _updateThemeInfo(
+ self
+ ):
+
+ name = self.ThemeComboBox.currentText()
+ if not name or name == "默认":
+ self.ThemeInfoLabel.setText("")
+ return
+ t = self.__theme_cache.get(name)
+ if t:
+ author = t.get("author", "未知")
+ brief = t.get("brief", "没有相关简介")
+ self.ThemeInfoLabel.setText(f"作者:{author}\n简介:{brief}")
+ else:
+ self.ThemeInfoLabel.setText("")
def _syncRadioFromNeedTheme(
self,
@@ -287,6 +280,7 @@ class ALSettingsWidget(QWidget, Ui_ALSettingsWidget):
_applyTheme(theme)
self.setNavigationIcons()
self.updateThemeStatus()
+ self._updateThemeInfo()
self.__original_style = self.currentStyleKey()
def maybeRestart(
@@ -341,6 +335,7 @@ class ALSettingsWidget(QWidget, Ui_ALSettingsWidget):
if idx >= 0:
self.ThemeComboBox.setCurrentIndex(idx)
self.updateThemeStatus()
+ self._updateThemeInfo()
except Exception as e:
QMessageBox.warning(
self,
@@ -348,6 +343,13 @@ class ALSettingsWidget(QWidget, Ui_ALSettingsWidget):
f"无法导入主题文件:{e}"
)
+ @Slot()
+ def onThemeComboBoxChanged(
+ self
+ ):
+
+ self._updateThemeInfo()
+
@Slot()
def onResetQssButtonClicked(
self
diff --git a/src/gui/resources/ui/ALSettingsWidget.ui b/src/gui/resources/ui/ALSettingsWidget.ui
index 78ddea1..21c5a8c 100644
--- a/src/gui/resources/ui/ALSettingsWidget.ui
+++ b/src/gui/resources/ui/ALSettingsWidget.ui
@@ -283,15 +283,15 @@
-
-
- false
-
0
25
+
+ false
+
选择或输入 QSS 样式表文件路径...
@@ -301,17 +301,33 @@
- 60
+ 25
+ 25
+
+
+
+
+ 25
25
- 导入
+ ...
+ -
+
+
+
+
+
+ true
+
+
+
-
@@ -319,15 +335,15 @@
-
-
- false
-
80
25
+
+ false
+
应用样式
@@ -364,7 +380,7 @@
-
- 当前使用程序默认外观。
+ 当前使用程序 默认 外观。
true
diff --git a/src/interfaces/ConfigProvider.py b/src/interfaces/ConfigProvider.py
index a4a50ed..d4f180a 100644
--- a/src/interfaces/ConfigProvider.py
+++ b/src/interfaces/ConfigProvider.py
@@ -70,7 +70,6 @@ class CfgKey:
ROOT = ConfigPath(ConfigType.GLOBAL, "appearance")
THEME = ConfigPath(ConfigType.GLOBAL, "appearance.theme")
STYLE = ConfigPath(ConfigType.GLOBAL, "appearance.style")
- CUSTOM_QSS = ConfigPath(ConfigType.GLOBAL, "appearance.custom_qss")
CUSTOM_THEME = ConfigPath(ConfigType.GLOBAL, "appearance.custom_theme")
class TIMERTASK:
diff --git a/src/managers/config/ConfigManager.py b/src/managers/config/ConfigManager.py
index bc2b38e..0f54f13 100644
--- a/src/managers/config/ConfigManager.py
+++ b/src/managers/config/ConfigManager.py
@@ -58,7 +58,6 @@ class ConfigTemplate:
"appearance": {
"theme": "system",
"style": "Fusion",
- "custom_qss": "",
"custom_theme": ""
}
}