1- pass
1+ # -*- coding: utf-8 -*-
2+ from PyQt5 .QtWidgets import QWidget , QFrame
3+ import importlib
4+ import sys
5+
6+ from Modules .Base .ModLogging import ModLogging , LoggingType as LT
7+ from Modules .Base .ModSetup import ModSetup as Setup
8+
9+ class ModPage :
10+ """页面管理模块,负责页面切换逻辑"""
11+
12+ _instance = None
13+
14+ def __new__ (cls ):
15+ """单例模式"""
16+ if cls ._instance is None :
17+ cls ._instance = super (ModPage , cls ).__new__ (cls )
18+ cls ._instance ._initialized = False
19+ return cls ._instance
20+
21+ def __init__ (self ):
22+ if self ._initialized :
23+ return
24+
25+ self .logger = ModLogging (module_name = "ModPage" )
26+ self .current_page = None
27+ self ._initialized = True
28+
29+ def switch_page (self , pan_main : QFrame , page_name : str ) -> bool :
30+ """切换页面
31+
32+ Args:
33+ pan_main: 主面板,用于放置页面
34+ page_name: 页面名称,如 "Launch"
35+
36+ Returns:
37+ bool: 切换是否成功
38+ """
39+ # 如果页面相同,不做任何事情
40+ if self .current_page == page_name :
41+ self .logger .write (f"页面 { page_name } 已经是当前页面,无需切换" , LT .INFO )
42+ return True
43+
44+ # 记录新页面名称
45+ self .logger .write (f"正在切换到页面: { page_name } " , LT .INFO )
46+
47+ # 删除 PanMain 中的所有子组件
48+ for child in pan_main .findChildren (QWidget ):
49+ child .setParent (None )
50+ child .deleteLater ()
51+
52+ # 根据传入的页面名称,实例化对应的页面
53+ 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+
66+ # 实例化页面
67+ page_instance = page_class (pan_main )
68+
69+ # 设置页面大小
70+ page_instance .setGeometry (0 , 0 , pan_main .width (), pan_main .height ())
71+
72+ # 确保页面在最上层
73+ page_instance .raise_ ()
74+
75+ # 更新当前页面名称
76+ self .current_page = page_name
77+
78+ self .logger .write (f"成功切换到页面: { page_name } " , LT .INFO )
79+ return True
80+
81+ except Exception as e :
82+ self .logger .write (f"切换到页面 { page_name } 时发生错误: { e } " , LT .ERROR )
83+ return False
84+
0 commit comments