66from Modules .Base .ModLogging import ModLogging , LoggingType as LT
77from 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+
915class 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