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

Commit bfb3782

Browse files
author
CreeperIsASpy
committed
feat(ModPage): 页面切换又双叒叕改了; feat(FormMain_ui): 增加下载页面切换按钮
1 parent e78173d commit bfb3782

3 files changed

Lines changed: 42 additions & 32 deletions

File tree

Plain_Craft_Launcher_2/FormMain_ui.py

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
from Controls.MyRoundButton import MyRoundButton
1212
from Controls.MyIconTextButton import MyIconTextButton
1313
from Modules.Base.ModSetup import ModSetup as Setup
14-
from Pages.PageLaunch.PageLaunch import PageLaunch
15-
from Modules.Base.ModPage import ModPage as Page
14+
from Modules.Base.ModPage import ModPagePanMain
15+
1616

1717

1818
class Ui_FormMain(object):
@@ -21,9 +21,6 @@ def setupUi(self, FormMain: QtWidgets.QWidget):
2121
setup = Setup()
2222
size = setup.get_settings('size')
2323
corner_radius = setup.get_settings('corner_radius')
24-
bg_color = setup.get_settings('ColorBrush5')
25-
fg_color = setup.get_settings('ColorBrush2')
26-
self.page_manager = Page()
2724

2825
FormMain.setObjectName("FormMain")
2926
FormMain.resize(*size)
@@ -63,39 +60,35 @@ def setupUi(self, FormMain: QtWidgets.QWidget):
6360
}}
6461
""")
6562
self.PanMain.setObjectName("PanMain")
63+
self.page_manager = ModPagePanMain(self.PanMain) # 初始化必须放在这
6664

6765
# 标题栏按钮 -- 退出
6866
self.BtnExit = MyRoundButton(self.PanTitle, svg_path="Images/BtnTitleExit.svg", size=(36, 36), tooltip="Exit")
69-
self.BtnExit.setGeometry(QtCore.QRect((size[0] - 72), 8, 36, 36))
67+
self.BtnExit.setGeometry(QtCore.QRect((size[0] - 16), 8, 36, 36))
7068
self.BtnExit.setObjectName("BtnExit")
7169

7270
# 标题栏按钮 -- 最小化
7371
self.BtnMin = MyRoundButton(self.PanTitle, svg_path="Images/BtnTitleMin.svg", size=(36, 36), tooltip="Minisize")
74-
self.BtnMin.setGeometry(QtCore.QRect((size[0] - 120), 8, 36, 36))
72+
self.BtnMin.setGeometry(QtCore.QRect((size[0] - 64), 8, 36, 36))
7573
self.BtnMin.setObjectName("BtnMin")
7674

7775
# 标题栏按钮 -- 切换到下载页面
76+
self.BtnPageDownload = MyIconTextButton(self.PanTitle, svg_path="Images/BtnTitlePageDownload.svg",
77+
text="Download", command=lambda: self.page_manager.switch_page(1))
78+
self.BtnPageDownload.setGeometry(QtCore.QRect(600, 8, 0, 0))
79+
self.BtnPageDownload.setObjectName("BtnPageDownload")
7880
# 标题栏按钮 -- 切换到启动页面
7981
self.BtnPageLaunch = MyIconTextButton(self.PanTitle, svg_path="Images/BtnTitlePageLaunch.svg",
80-
text="Launch", command=lambda: self.page_manager.switch_page(self.PanMain, 0))
81-
self.BtnPageLaunch.setGeometry(QtCore.QRect(500, 8, 0, 0))
82-
self.BtnPageLaunch.setObjectName("BtnPageDownload")
82+
text="Launch", command=lambda: self.page_manager.switch_page(0))
83+
self.BtnPageLaunch.setGeometry(QtCore.QRect(420, 8, 0, 0))
84+
self.BtnPageLaunch.setObjectName("BtnPageLaunch")
8385

8486
# 标题栏 Svg -- 标题
8587
self.SVGTitle = QSvgWidget(self.PanTitle)
8688
self.SVGTitle.load("Images/svgtitle.svg")
8789
self.SVGTitle.setGeometry(QtCore.QRect(8, 8, 120, 40))
8890
self.SVGTitle.setStyleSheet("background-color: transparent;")
8991
self.SVGTitle.setObjectName("SVGTitle")
90-
91-
# 添加页面到 QStackedWidget
92-
self.page_launch = PageLaunch()
93-
self.PanMain.addWidget(self.page_launch)
94-
95-
# 如果有 PageDownload,也添加进来
96-
from Pages.PageDownload.PageDownload import PageDownload
97-
self.page_download = PageDownload()
98-
self.PanMain.addWidget(self.page_download)
9992

10093
# 默认显示第一个页面
10194
self.PanMain.setCurrentIndex(0)
Lines changed: 5 additions & 0 deletions
Loading

Plain_Craft_Launcher_2/Modules/Base/ModPage.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# -*- coding: utf-8 -*-
2+
# 不许做单例模式!!!!!!!!!!!!!!!
23
from PyQt5.QtWidgets import QStackedWidget
34

45
from Modules.Base.ModLogging import ModLogging, LoggingType as LT
@@ -11,22 +12,9 @@
1112
class ModPage:
1213
"""页面管理模块,负责页面切换逻辑"""
1314

14-
_instance = None
15-
16-
def __new__(cls):
17-
"""单例模式"""
18-
if cls._instance is None:
19-
cls._instance = super(ModPage, cls).__new__(cls)
20-
cls._instance._initialized = False
21-
return cls._instance
22-
2315
def __init__(self):
24-
if self._initialized:
25-
return
26-
2716
self.logger = ModLogging(module_name="ModPage")
2817
self.current_page_index = 0
29-
self._initialized = True
3018

3119
def switch_page(self, stack_widget: QStackedWidget, page_id: int) -> bool:
3220
"""切换页面
@@ -60,3 +48,27 @@ def switch_page(self, stack_widget: QStackedWidget, page_id: int) -> bool:
6048
except Exception as e:
6149
self.logger.write(f"切换到页面索引 {page_id} 时发生错误: {e}", LT.ERROR)
6250
return False
51+
52+
53+
class ModPagePanMain(ModPage):
54+
"""主面板页面管理模块,负责将所有页面添加到主面板并管理切换"""
55+
56+
def __init__(self, pan_main: QStackedWidget):
57+
super().__init__()
58+
self.pan_main = pan_main
59+
60+
# 初始化所有页面
61+
for page_class in PAGES:
62+
page = page_class(self.pan_main)
63+
self.pan_main.addWidget(page)
64+
65+
def switch_page(self, page_id: int) -> bool:
66+
"""重写切换页面方法,简化调用方式
67+
68+
Args:
69+
page_id: 页面索引,如 0 表示 PageLaunch
70+
71+
Returns:
72+
bool: 切换是否成功
73+
"""
74+
return super().switch_page(self.pan_main, page_id)

0 commit comments

Comments
 (0)