Skip to content
This repository was archived by the owner on Jun 28, 2025. It is now read-only.

Commit be2d0cb

Browse files
author
CreeperIsASpy
committed
refactor(ModPage): 把名称式调用换成id式
1 parent d9a23b0 commit be2d0cb

2 files changed

Lines changed: 41 additions & 35 deletions

File tree

Plain_Craft_Launcher_2/FormMain_ui.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def setupUi(self, FormMain: QtWidgets.QWidget):
7979
# 标题栏按钮 -- 切换到下载页面
8080
self.BtnPageLaunch = MyIconTextButton(self.PanTitle, svg_path="Images/BtnTitlePageLaunch.svg",
8181
text="Launch",
82-
command=lambda: self.page_manager.switch_page(self.PanMain, "Launch"))
82+
command=lambda: self.page_manager.switch_page(self.PanMain, 0))
8383
self.BtnPageLaunch.setGeometry(QtCore.QRect(500, 8, 0, 0))
8484
self.BtnPageLaunch.setObjectName("BtnPageDownload")
8585

Plain_Craft_Launcher_2/Modules/Base/ModPage.py

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,79 +6,85 @@
66
from Modules.Base.ModLogging import ModLogging, LoggingType as LT
77
from Modules.Base.ModSetup import ModSetup as Setup
88

9+
from Pages.PageLaunch.PageLaunch import PageLaunch
10+
from Pages.PageDownload.PageDownload import PageDownload
11+
12+
PAGES = (PageLaunch, PageDownload)
13+
14+
915
class ModPage:
1016
"""页面管理模块,负责页面切换逻辑"""
11-
17+
1218
_instance = None
13-
19+
1420
def __new__(cls):
1521
"""单例模式"""
1622
if cls._instance is None:
1723
cls._instance = super(ModPage, cls).__new__(cls)
1824
cls._instance._initialized = False
1925
return cls._instance
20-
26+
2127
def __init__(self):
2228
if self._initialized:
2329
return
24-
30+
2531
self.logger = ModLogging(module_name="ModPage")
2632
self.current_page = None
2733
self._initialized = True
28-
29-
def switch_page(self, pan_main: QFrame, page_name: str) -> bool:
34+
35+
def switch_page(self, pan_main: QFrame, page_id: int) -> bool:
3036
"""切换页面
3137
3238
Args:
3339
pan_main: 主面板,用于放置页面
34-
page_name: 页面名称,如 "Launch"
40+
page_id: 页面id,如"0"
3541
3642
Returns:
3743
bool: 切换是否成功
3844
"""
45+
46+
try:
47+
page_class = PAGES[page_id]
48+
except IndexError:
49+
self.logger.write(f"页面id {page_id} 不存在。", LT.ERROR)
50+
return False
51+
52+
for widget in pan_main.findChildren(QWidget):
53+
obj_name = widget.objectName()
54+
if "Page" in obj_name:
55+
self.current_page = widget
56+
3957
# 如果页面相同,不做任何事情
40-
if self.current_page == page_name:
41-
self.logger.write(f"页面 {page_name} 已经是当前页面,无需切换", LT.INFO)
58+
if self.current_page == page_class:
59+
self.logger.write(f"页面 {page_class.__name__} 已经是当前页面,无需切换", LT.INFO)
4260
return True
43-
61+
4462
# 记录新页面名称
45-
self.logger.write(f"正在切换到页面: {page_name}", LT.INFO)
46-
63+
self.logger.write(f"正在切换到页面: {page_class.__name__}", LT.INFO)
64+
4765
# 删除 PanMain 中的所有子组件
4866
for child in pan_main.findChildren(QWidget):
4967
child.setParent(None)
5068
child.deleteLater()
51-
69+
5270
# 根据传入的页面名称,实例化对应的页面
5371
try:
54-
# 构建页面类的完整路径
55-
page_class_name = f"Page{page_name}"
56-
page_module_path = f"Pages.Page{page_name}.{page_class_name}"
57-
58-
# 动态导入模块
59-
try:
60-
page_module = importlib.import_module(page_module_path)
61-
page_class = getattr(page_module, page_class_name)
62-
except (ImportError, AttributeError) as e:
63-
self.logger.write(f"无法导入页面模块 {page_module_path}: {e}", LT.ERROR)
64-
return False
65-
72+
6673
# 实例化页面
6774
page_instance = page_class(pan_main)
68-
75+
6976
# 设置页面大小
7077
page_instance.setGeometry(0, 0, pan_main.width(), pan_main.height())
71-
78+
7279
# 确保页面在最上层
7380
page_instance.raise_()
74-
81+
7582
# 更新当前页面名称
76-
self.current_page = page_name
77-
78-
self.logger.write(f"成功切换到页面: {page_name}", LT.INFO)
83+
self.current_page = page_class
84+
85+
self.logger.write(f"成功切换到页面: {page_class.__name__}", LT.INFO)
7986
return True
80-
87+
8188
except Exception as e:
82-
self.logger.write(f"切换到页面 {page_name} 时发生错误: {e}", LT.ERROR)
89+
self.logger.write(f"切换到页面 {page_class.__name__} 时发生错误: {e}", LT.ERROR)
8390
return False
84-

0 commit comments

Comments
 (0)