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

Commit 82f18e1

Browse files
author
CreeperIsASpy
committed
2 parents 2a41553 + 705fa54 commit 82f18e1

2 files changed

Lines changed: 87 additions & 2 deletions

File tree

Plain_Craft_Launcher_2/FormMain_ui.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from Controls.MyIconTextButton import MyIconTextButton
1313
from Modules.Base.ModSetup import ModSetup as Setup
1414
from Pages.PageLaunch.PageLaunch import PageLaunch
15+
from Modules.Base.ModPage import ModPage as Page
1516

1617

1718
class Ui_FormMain(object):
@@ -22,6 +23,7 @@ def setupUi(self, FormMain: QtWidgets.QWidget):
2223
corner_radius = setup.get_settings('corner_radius')
2324
bg_color = setup.get_settings('ColorBrush5')
2425
fg_color = setup.get_settings('ColorBrush2')
26+
self.page_manager = Page()
2527

2628
FormMain.setObjectName("FormMain")
2729
FormMain.resize(*size)
@@ -76,7 +78,7 @@ def setupUi(self, FormMain: QtWidgets.QWidget):
7678

7779
# 标题栏按钮 -- 切换到下载页面
7880
self.BtnPageLaunch = MyIconTextButton(self.PanTitle, svg_path="Images/BtnTitlePageLaunch.svg",
79-
text="Launch")
81+
text="Launch", command=lambda: self.page_manager.switch_page(self.ui.PanMain, "Launch"))
8082
self.BtnPageLaunch.setGeometry(QtCore.QRect(500, 8, 0, 0))
8183
self.BtnPageLaunch.setObjectName("BtnPageDownload")
8284

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,84 @@
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

Comments
 (0)