diff --git a/source/main_window.py b/source/main_window.py index b3eaeaf..e84f131 100644 --- a/source/main_window.py +++ b/source/main_window.py @@ -16,7 +16,7 @@ from data.config import ( PLUGIN_HASH, UA, CONFIG_URL, LOG_FILE ) from utils import ( - load_config, save_config, HashManager, AdminPrivileges, msgbox_frame + load_config, save_config, HashManager, AdminPrivileges, msgbox_frame, load_image_from_file ) from workers import ( DownloadThread, ProgressWindow, IpOptimizerThread, @@ -37,9 +37,9 @@ class MainWindow(QMainWindow): # 调整窗口大小以适应背景图片比例 (1280x720) self.resize(1280, 720) - # 移除大小限制,允许自由缩放 - # self.setMinimumSize(QSize(1024, 576)) - # self.setMaximumSize(QSize(1024, 576)) + # 设置固定尺寸范围 + self.setMinimumSize(QSize(1024, 576)) + self.setMaximumSize(QSize(1280, 720)) # 窗口比例 (16:9) self.aspect_ratio = 16 / 9 @@ -174,17 +174,22 @@ class MainWindow(QMainWindow): if hasattr(self.ui, 'content_container'): self.ui.content_container.setGeometry(0, 0, new_width, new_height) - # 更新标题栏宽度 + # 更新标题栏宽度和高度 if hasattr(self.ui, 'title_bar'): - self.ui.title_bar.setGeometry(0, 0, new_width, 30) + self.ui.title_bar.setGeometry(0, 0, new_width, 35) + + # 更新菜单区域 + if hasattr(self.ui, 'menu_area'): + self.ui.menu_area.setGeometry(0, 35, new_width, 30) # 更新内容区域大小 if hasattr(self.ui, 'inner_content'): self.ui.inner_content.setGeometry(0, 65, new_width, new_height - 65) - # 更新背景图大小 + # 更新背景图大小 - 使用setScaledContents简化处理 if hasattr(self.ui, 'Mainbg'): self.ui.Mainbg.setGeometry(0, 0, new_width, new_height - 65) + # 使用setScaledContents=True,不需要手动缩放 if hasattr(self.ui, 'loadbg'): self.ui.loadbg.setGeometry(0, 0, new_width, new_height - 65) diff --git a/source/ui/Ui_install.py b/source/ui/Ui_install.py index dd35111..0c72deb 100644 --- a/source/ui/Ui_install.py +++ b/source/ui/Ui_install.py @@ -15,16 +15,8 @@ import os # 导入配置常量 from data.config import APP_NAME, APP_VERSION - -def load_base64_image(base64_str): - pixmap = QPixmap() - pixmap.loadFromData(base64.b64decode(base64_str)) - return pixmap - -def load_image_from_file(file_path): - if os.path.exists(file_path): - return QPixmap(file_path) - return QPixmap() +# 导入工具函数 +from utils import load_base64_image, load_image_from_file class Ui_MainWindows(object): def setupUi(self, MainWindows): @@ -33,9 +25,11 @@ class Ui_MainWindows(object): MainWindows.setEnabled(True) # 调整窗口默认大小为1280x720以匹配背景图片 MainWindows.resize(1280, 720) - # 移除最大和最小尺寸限制,允许自由缩放 - # MainWindows.setMinimumSize(QSize(1024, 576)) - # MainWindows.setMaximumSize(QSize(1024, 576)) + # 锁定窗口比例为16:9,确保不会变形,同时限制最大尺寸不超过背景图片 + MainWindows.setMinimumSize(QSize(1024, 576)) # 16:9最小尺寸 + MainWindows.setMaximumSize(QSize(1280, 720)) # 将最大尺寸限制为1280x720 + # 设置固定纵横比 + self.aspect_ratio = 16/9 MainWindows.setMouseTracking(False) MainWindows.setTabletTracking(False) MainWindows.setAcceptDrops(True) @@ -296,46 +290,59 @@ class Ui_MainWindows(object): # 原来的loadbg保持不变 self.loadbg = QLabel(self.inner_content) self.loadbg.setObjectName(u"loadbg") - self.loadbg.setGeometry(QRect(0, 0, 1280, 655)) # 调整高度从645到655 - self.loadbg.setPixmap(load_base64_image(img_data["loadbg"])) + self.loadbg.setGeometry(QRect(0, 0, 1280, 655)) + # 加载背景图并允许拉伸 + bg_pixmap = load_base64_image(img_data["loadbg"]) + self.loadbg.setPixmap(bg_pixmap) self.loadbg.setScaledContents(True) self.vol1bg = QLabel(self.inner_content) self.vol1bg.setObjectName(u"vol1bg") self.vol1bg.setGeometry(QRect(0, 150, 93, 64)) + # 使用更简洁的方式 self.vol1bg.setPixmap(load_base64_image(img_data["vol1"])) self.vol1bg.setScaledContents(True) self.vol2bg = QLabel(self.inner_content) self.vol2bg.setObjectName(u"vol2bg") self.vol2bg.setGeometry(QRect(0, 210, 93, 64)) + # 使用更简洁的方式 self.vol2bg.setPixmap(load_base64_image(img_data["vol2"])) self.vol2bg.setScaledContents(True) self.vol3bg = QLabel(self.inner_content) self.vol3bg.setObjectName(u"vol3bg") self.vol3bg.setGeometry(QRect(0, 270, 93, 64)) + # 使用更简洁的方式 self.vol3bg.setPixmap(load_base64_image(img_data["vol3"])) self.vol3bg.setScaledContents(True) self.vol4bg = QLabel(self.inner_content) self.vol4bg.setObjectName(u"vol4bg") self.vol4bg.setGeometry(QRect(0, 330, 93, 64)) + # 使用更简洁的方式 self.vol4bg.setPixmap(load_base64_image(img_data["vol4"])) self.vol4bg.setScaledContents(True) self.afterbg = QLabel(self.inner_content) self.afterbg.setObjectName(u"afterbg") self.afterbg.setGeometry(QRect(0, 390, 93, 64)) + # 使用更简洁的方式 self.afterbg.setPixmap(load_base64_image(img_data["after"])) self.afterbg.setScaledContents(True) # 修复Mainbg位置并使用title_bg1.png作为背景图片 self.Mainbg = QLabel(self.inner_content) self.Mainbg.setObjectName(u"Mainbg") - self.Mainbg.setGeometry(QRect(0, 0, 1280, 655)) # 调整高度从645到655 - self.Mainbg.setPixmap(load_image_from_file(os.path.join(os.path.dirname(os.path.dirname(__file__)), "IMG", "BG", "title_bg1.png"))) - self.Mainbg.setScaledContents(True) + self.Mainbg.setGeometry(QRect(0, 0, 1280, 655)) + # 允许拉伸以填满整个区域 + main_bg_pixmap = load_image_from_file(os.path.join(os.path.dirname(os.path.dirname(__file__)), "IMG", "BG", "title_bg1.png")) + + # 如果加载的图片不是空的,则设置,并允许拉伸填满 + if not main_bg_pixmap.isNull(): + self.Mainbg.setPixmap(main_bg_pixmap) + self.Mainbg.setScaledContents(True) + self.Mainbg.setAlignment(Qt.AlignmentFlag.AlignCenter) # 使用新的按钮图片 button_pixmap = load_image_from_file(os.path.join(os.path.dirname(os.path.dirname(__file__)), "IMG", "BTN", "Button.png")) diff --git a/source/utils/__init__.py b/source/utils/__init__.py index 5b99204..1662cfe 100644 --- a/source/utils/__init__.py +++ b/source/utils/__init__.py @@ -1,12 +1,14 @@ from .logger import Logger from .helpers import ( load_base64_image, HashManager, AdminPrivileges, msgbox_frame, - load_config, save_config, HostsManager, censor_url, resource_path + load_config, save_config, HostsManager, censor_url, resource_path, + load_image_from_file ) __all__ = [ 'Logger', 'load_base64_image', + 'load_image_from_file', 'HashManager', 'AdminPrivileges', 'msgbox_frame', diff --git a/source/utils/helpers.py b/source/utils/helpers.py index 3ab61df..2678936 100644 --- a/source/utils/helpers.py +++ b/source/utils/helpers.py @@ -37,6 +37,19 @@ def load_base64_image(base64_str): pixmap.loadFromData(base64.b64decode(base64_str)) return pixmap +def load_image_from_file(file_path): + """加载图像文件到QPixmap + + Args: + file_path: 图像文件路径 + + Returns: + QPixmap: 加载的图像 + """ + if os.path.exists(file_path): + return QPixmap(file_path) + return QPixmap() + def msgbox_frame(title, text, buttons=QtWidgets.QMessageBox.StandardButton.NoButton): msg_box = QtWidgets.QMessageBox() msg_box.setWindowTitle(title)