diff --git a/app/config.py b/app/config.py index 1cca4ea..5c8abb7 100644 --- a/app/config.py +++ b/app/config.py @@ -9,13 +9,16 @@ class Config: 该类通过读取配置文件并将内容映射到实例属性中,使得配置项可以像访问普通属性一样被访问。 它支持递归加载字典类型的配置项,以及直接加载列表和基本数据类型的配置项。 """ - + base_config = { + "theme": "dark", + } def __init__(self): """ 初始化Config实例,从配置文件中加载配置并更新实例属性。 """ # 加载配置文件并指定编码为utf-8,确保中文字符正确解析 - self._conf_Dict = json5.load(os.path.join(env.dirs.user_config_path, "config.json"), encoding="utf-8") + self._conf_Dict = json5.load(open(os.path.join(env.dirs.user_config_path, "config.json"), encoding="utf-8")) + self._conf_Dict = self.merge_dicts(self.base_config, self._conf_Dict) # 设置实例的名称,用于标识配置类型 self.__name__ = "" # 更新实例属性,将配置项映射为可直接访问的属性 @@ -41,7 +44,27 @@ class Config: raise AttributeError( f"'{self.__class__.__name__}' object has no attribute '{name}'" ) + def merge_dicts(self, *dict_args): + """ + 递归合并多个字典。 + 参数: + *dict_args: 多个字典参数,按优先级从低到高传递。 + default (any, 可选): 默认值,当找不到键时返回此值,默认为 None。 + + 返回: + 合并后的字典。 + """ + result = {} + for dictionary in dict_args: + for key, value in dictionary.items(): + if key in result and isinstance(result[key], dict) and isinstance(value, dict): + # 如果当前键对应的值都是字典,则递归合并 + result[key] = self.merge_dicts(result[key], value) + else: + # 否则直接覆盖或设置值 + result[key] = value + return result def update(self): """ 更新实例属性,将配置字典中的内容映射到实例属性中。 diff --git a/main.py b/main.py index a45e2e5..947cb44 100644 --- a/main.py +++ b/main.py @@ -16,7 +16,12 @@ class MainWindow(FluentWindow): # 设置窗口标题 self.setWindowTitle("HoYoCenter") - setTheme(Theme.LIGHT) + if env.config.theme == "dark": + setTheme(Theme.DARK) + elif env.config.theme == "light": + setTheme(Theme.LIGHT) + else: + setTheme(Theme.AUTO) # 定义id和对象映射 self.id2obj = {