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

Commit 037b940

Browse files
committed
merged #2 and fixed conflicts
2 parents 2d31d38 + f12298d commit 037b940

9 files changed

Lines changed: 97 additions & 156 deletions

File tree

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ Plain_Craft_Launcher_2/data/*.log
1616
**/.minecraft/
1717
**/dist/*
1818
nuitka-crash-report.xml
19-
icon/
19+
icon/

Plain_Craft_Launcher_2/Application.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
from PyQt5.QtWidgets import *
2+
from PyQt5.QtWidgets import QApplication
33
import sys
44

55
from FormMain import FormMain

Plain_Craft_Launcher_2/Controls/RoundShadow.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
from PyQt5.QtCore import Qt, QRectF
44
from PyQt5.QtGui import QPainter, QPainterPath, QBrush, QColor, QPaintEvent
55

6-
from Modules.Base.ModSetup import ModSetup as Setup
6+
from Modules.Base.ModSetup import mod_setup as setup
77

88
class RoundShadow(QWidget):
99
"""圆角边框类"""
1010

1111
def __init__(self):
1212
super().__init__()
13-
self.border_width = Setup().get_settings('corner_radius') # 从设置中获取圆角值
13+
self.border_width = setup.CORNER_RADIUS # 从设置中获取圆角值
1414
# 设置 窗口无边框和背景透明 *必须
1515
self.setAttribute(Qt.WA_TranslucentBackground)
1616
# 修改窗口标志,添加系统菜单和最小化按钮标志

Plain_Craft_Launcher_2/FormMain.py

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import sys
33
import os
44
from PyQt5.QtWidgets import QApplication, QWidget
5-
from PyQt5.QtGui import QResizeEvent
5+
from PyQt5.QtGui import QResizeEvent, QMouseEvent
66
from PyQt5.QtCore import Qt, QPropertyAnimation, QEasingCurve, QRect
77

88
from Modules.Base.ModLogging import ModLogging, LoggingType as LT
@@ -21,40 +21,44 @@ def __init__(self):
2121
super().__init__()
2222
# 初始化日志
2323
self.logger = ModLogging(module_name="FormMain")
24-
24+
2525
# 设置窗口标志,确保最小化时显示在任务栏
26-
self.setWindowFlags(Qt.FramelessWindowHint | Qt.Window | Qt.WindowSystemMenuHint | Qt.WindowMinimizeButtonHint)
27-
26+
self.setWindowFlags(
27+
Qt.FramelessWindowHint
28+
| Qt.Window
29+
| Qt.WindowSystemMenuHint
30+
| Qt.WindowMinimizeButtonHint
31+
)
32+
2833
# 窗口加载第一步:基础
2934
# 设置窗口大小
30-
self.resize(900, 550)
35+
self.resize(*mod_setup.SIZE)
3136
self.logger.write("窗口加载第一步完成", LT.INFO)
32-
37+
3338
# 窗口加载第二步:加载 UI 控件
3439
# 创建一个容器widget
3540
self.container = QWidget(self)
3641
self.container.setGeometry(9, 9, self.width() - 18, self.height() - 18)
37-
42+
3843
# 设置UI
3944
self.ui = Ui_FormMain()
4045
self.ui.setupUi(self.container)
41-
4246

4347
self.logger.write("窗口加载第二步完成", LT.INFO)
4448

4549
# 窗口加载第三步:链接信号/槽(真的不用设置无边框)
4650
# 连接按钮事件
4751
self.ui.BtnExit.clicked.connect(self.close_window)
4852
self.ui.BtnMin.clicked.connect(self.minimize_window)
49-
53+
5054
# 记录窗口是否最大化
5155
self.is_maximized = False
5256
# 记录窗口正常状态下的位置和大小
5357
self.normal_geometry = self.geometry()
54-
58+
5559
# 初始化拖动相关变量
5660
self._drag_start_pos = None
57-
61+
5862
# 设置标题栏鼠标追踪
5963
self.ui.PanTitle.setMouseTracking(True)
6064
self.ui.PanTitle.mousePressEvent = self.PanTitle_mousePressEvent
@@ -65,23 +69,23 @@ def __init__(self):
6569

6670
self.logger.write("FormMain 加载完成", LT.INFO)
6771

68-
def PanTitle_mousePressEvent(self, event):
72+
def PanTitle_mousePressEvent(self, a0: QMouseEvent):
6973
"""处理标题栏鼠标按下事件"""
70-
if event.button() == Qt.LeftButton:
71-
self._drag_start_pos = event.globalPos() - self.pos()
72-
event.accept()
74+
if a0.button() == Qt.LeftButton:
75+
self._drag_start_pos = a0.globalPos() - self.pos()
76+
a0.accept()
7377

74-
def PanTitle_mouseMoveEvent(self, event):
78+
def PanTitle_mouseMoveEvent(self, a0: QMouseEvent):
7579
"""处理标题栏鼠标移动事件"""
7680
if self._drag_start_pos is not None:
77-
self.move(event.globalPos() - self._drag_start_pos)
78-
event.accept()
81+
self.move(a0.globalPos() - self._drag_start_pos)
82+
a0.accept()
7983

80-
def PanTitle_mouseReleaseEvent(self, event):
84+
def PanTitle_mouseReleaseEvent(self, a0: QMouseEvent):
8185
"""处理标题栏鼠标释放事件"""
82-
if event.button() == Qt.LeftButton:
86+
if a0.button() == Qt.LeftButton:
8387
self._drag_start_pos = None
84-
event.accept()
88+
a0.accept()
8589

8690
def resizeEvent(self, a0: QResizeEvent):
8791
"""处理窗口大小变化"""
@@ -116,23 +120,21 @@ def minimize_window(self):
116120
"""跨平台最小化窗口"""
117121
self.logger.write("按下按钮:BtnMin,正在尝试最小化窗口", LT.INFO)
118122
self.showMinimized()
119-
123+
120124
def toggle_maximize_window(self):
121125
"""切换窗口最大化/还原状态"""
122126
if self.isMaximized():
123127
self.restore_window()
124128
else:
125129
self.maximize_window()
126-
130+
127131
def maximize_window(self):
128132
"""跨平台最大化窗口"""
129133
self.logger.write("按下按钮:BtnMax,正在尝试最大化窗口", LT.INFO)
130134
# 保存当前窗口位置和大小(如果需要)
131135
self.showMaximized()
132-
136+
133137
def restore_window(self):
134138
"""跨平台还原窗口"""
135139
self.logger.write("按下按钮:BtnMax,正在尝试还原窗口", LT.INFO)
136140
self.showNormal()
137-
138-

Plain_Craft_Launcher_2/FormMain.ui

Lines changed: 0 additions & 75 deletions
This file was deleted.

Plain_Craft_Launcher_2/FormMain_ui.py

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,22 +13,25 @@
1313
from Pages.PageLaunch.PageLaunch import PageLaunch
1414

1515
class Ui_FormMain(object):
16+
1617
def setupUi(self, FormMain: QtWidgets.QWidget):
1718
# 获取所有需要的设置项
18-
setup = Setup()
19-
size = setup.get_settings('size')
20-
corner_radius = setup.get_settings('corner_radius')
21-
bg_color = setup.get_settings('ColorBrush5')
22-
fg_color = setup.get_settings('ColorBrush2')
23-
19+
size = setup.SIZE
20+
21+
corner_radius = setup.CORNER_RADIUS
22+
bg_color = setup.color_brush_5
23+
fg_color = setup.color_brush_2
24+
2425
FormMain.setObjectName("FormMain")
2526
FormMain.resize(*size)
2627
FormMain.setBaseSize(QtCore.QSize(*size))
2728
FormMain.setStyleSheet(f"background-color: transparent; ")
2829
icon = QtGui.QIcon()
29-
icon.addPixmap(QtGui.QPixmap(":/.ico/icon.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
30+
icon.addPixmap(
31+
QtGui.QPixmap(":/.ico/icon.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off
32+
)
3033
FormMain.setWindowIcon(icon)
31-
34+
3235
# 标题栏 Panel
3336
self.PanTitle = QtWidgets.QFrame(FormMain)
3437
title_height = 48
@@ -42,9 +45,10 @@ def setupUi(self, FormMain: QtWidgets.QWidget):
4245
border-top-right-radius: {corner_radius}px;
4346
border-bottom: none;
4447
}}
45-
""")
46-
self.PanTitle.setFrameShape(QtWidgets.QFrame.NoFrame)
47-
self.PanTitle.setFrameShadow(QtWidgets.QFrame.Plain)
48+
"""
49+
)
50+
self.PanTitle.setFrameShape(QtWidgets.QFrame.NoFrame)
51+
self.PanTitle.setFrameShadow(QtWidgets.QFrame.Plain)
4852
self.PanTitle.setObjectName("PanTitle")
4953

5054
# 主 Panel
@@ -57,25 +61,34 @@ def setupUi(self, FormMain: QtWidgets.QWidget):
5761
border-bottom-left-radius: {corner_radius}px;
5862
border-bottom-right-radius: {corner_radius}px;
5963
}}
60-
""")
61-
self.PanMain.setFrameShape(QtWidgets.QFrame.NoFrame)
62-
self.PanMain.setFrameShadow(QtWidgets.QFrame.Plain)
64+
"""
65+
)
66+
self.PanMain.setFrameShape(QtWidgets.QFrame.NoFrame)
67+
self.PanMain.setFrameShadow(QtWidgets.QFrame.Plain)
6368
self.PanMain.setObjectName("PanMain")
6469

6570
# 标题栏按钮 -- 退出
66-
self.BtnExit = MyRoundButton(self.PanTitle, svg_path="Images/BtnTitleExit.svg", size=(36, 36), tooltip="Exit")
67-
self.BtnExit.setGeometry(QtCore.QRect((size[0] - 72), 8, 36, 36))
71+
self.BtnExit = MyRoundButton(
72+
self.PanTitle,
73+
svg_path="Images/BtnTitleClose.svg",
74+
size=(14, 14),
75+
tooltip="Exit",
76+
padding=(7, 7, -10, -10),
77+
)
78+
self.BtnExit.setGeometry(QtCore.QRect((size[0] - 50), 15, 14, 14))
6879
self.BtnExit.setObjectName("BtnExit")
6980

7081
# 标题栏按钮 -- 最小化
71-
self.BtnMin = MyRoundButton(self.PanTitle, svg_path="Images/BtnTitleMin.svg", size=(36, 36), tooltip="Minisize")
72-
self.BtnMin.setGeometry(QtCore.QRect((size[0] - 120), 8, 36, 36))
82+
self.BtnMin = QtWidgets.QPushButton(self.PanTitle)
83+
self.BtnMin.setGeometry(QtCore.QRect((size[0] - 98), 2, 40, 40))
84+
self.BtnMin.setStyleSheet("background-color: transparent;")
85+
self.BtnMin.setText("—")
7386
self.BtnMin.setObjectName("BtnMin")
7487

7588
# 标题栏标签 -- 标题
7689
self.SVGTitle = QSvgWidget(self.PanTitle)
7790
self.SVGTitle.load("Images/svgtitle.svg")
78-
self.SVGTitle.setGeometry(QtCore.QRect(8, 8, 120, 40)) # 缩小尺寸
91+
self.SVGTitle.setGeometry(QtCore.QRect(2, 14, 76, 24))
7992
self.SVGTitle.setStyleSheet("background-color: transparent;")
8093
self.SVGTitle.setObjectName("SVGTitle")
8194

@@ -91,4 +104,5 @@ def retranslateUi(self, FormMain: QtWidgets.QWidget):
91104
_translate = QtCore.QCoreApplication.translate
92105
FormMain.setWindowTitle(_translate("FormMain", "Plain Craft Launcher 2"))
93106

107+
94108
from Resources import *

Plain_Craft_Launcher_2/Modules/Base/ModSetup.py

Lines changed: 10 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,15 @@
33
from typing import Any
44
from .ModLogging import ModLogging, LoggingType as LT
55

6+
67
class ModSetup:
78
"""写入/读取设置相关的类"""
8-
_instance = None
9-
10-
def __new__(cls):
11-
"""单例模式"""
12-
if cls._instance is None:
13-
cls._instance = super(ModSetup, cls).__new__(cls)
14-
cls._instance._initialized = False
15-
return cls._instance
16-
9+
# 常量(不随主题变化)
10+
CORNER_RADIUS = 8
11+
SIZE: tuple[int, int] = (850, 500)
12+
TITLE_BAR_H: int = 48
13+
1714
def __init__(self):
18-
if self._initialized:
19-
return
20-
self._initialized = True
21-
2215
self.logger = ModLogging(module_name="ModSetup")
2316
self.load_settings()
2417
self.logger.write("ModSetup 加载完成", LT.INFO)
@@ -42,7 +35,7 @@ def setup_settings(self):
4235

4336
self.logger.write("设置初始化完成", LT.INFO)
4437

45-
def load_settings(self, file_path:str="./data/Config.json"):
38+
def load_settings(self, file_path: str = "./data/Config.json"):
4639
"""读取已经存储的设置"""
4740
try:
4841
with open(file_path, "r") as f:
@@ -53,29 +46,15 @@ def load_settings(self, file_path:str="./data/Config.json"):
5346
self.logger.write("设置文件读取成功", LT.INFO)
5447
except FileNotFoundError:
5548
self.logger.write("设置文件未找到,进行初始化", LT.INFO)
56-
self.setup_settings()
49+
self.setup_settings()
5750

58-
def save_settings(self, file_path:str="./data/Config.json"):
51+
def save_settings(self, file_path: str = "./data/Config.json"):
5952
"""保存设置"""
6053
settings = self.__dict__
6154
with open(file_path, "w") as f:
6255
json.dump(settings, f)
6356

6457
self.logger.write("设置文件保存成功", LT.INFO)
6558

66-
def get_settings(self, setting: str):
67-
"""获取设置"""
68-
return getattr(self, setting, None)
69-
70-
def set_settings(self, setting: str, value: Any) -> None:
71-
"""设置设置"""
72-
setattr(self, setting, value)
73-
self.save_settings()
74-
75-
def __getitem__(self, key: str) -> Any:
76-
"""重载 [] 运算符"""
77-
return self.get_settings(key)
7859

79-
def __setitem__(self, key: str, value: Any) -> None:
80-
"""重载 [] 运算符"""
81-
self.set_settings(key, value)
60+
mod_setup = ModSetup()

0 commit comments

Comments
 (0)