feat(core): 优化菜单样式和字体,添加开发者选项菜单

- 从 UI_install.py 中获取字体属性,确保菜单样式一致
- 优化下载命令参数,提高下载速度和性能
- 修复部分 UI 元素的显示问题
This commit is contained in:
hyb-oyqq
2025-07-30 18:12:02 +08:00
parent a411461f63
commit db9736cc4e
4 changed files with 127 additions and 24 deletions

View File

@@ -1,5 +1,5 @@
from PySide6.QtGui import QIcon, QAction, QFont from PySide6.QtGui import QIcon, QAction, QFont
from PySide6.QtWidgets import QMessageBox, QMainWindow from PySide6.QtWidgets import QMessageBox, QMainWindow, QMenu
from PySide6.QtCore import Qt from PySide6.QtCore import Qt
import webbrowser import webbrowser
@@ -17,6 +17,8 @@ class UIManager:
# 使用getattr获取ui属性如果不存在则为None # 使用getattr获取ui属性如果不存在则为None
self.ui = getattr(main_window, 'ui', None) self.ui = getattr(main_window, 'ui', None)
self.debug_action = None self.debug_action = None
self.turbo_download_action = None
self.dev_menu = None
def setup_ui(self): def setup_ui(self):
"""设置UI元素包括窗口图标、标题和菜单""" """设置UI元素包括窗口图标、标题和菜单"""
@@ -60,8 +62,85 @@ class UIManager:
if not self.ui or not hasattr(self.ui, 'menu'): if not self.ui or not hasattr(self.ui, 'menu'):
return return
# 创建菜单项 # 获取自定义字体和字体族名称
font_family = "Arial" # 默认字体族
menu_font = None
# 尝试从UI中获取字体和字体族
try:
# 优先从Ui_install.py中获取font_family变量
import os
from PySide6.QtGui import QFontDatabase
# 尝试直接加载字体并获取字体族
font_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), "fonts", "SmileySans-Oblique.ttf")
if os.path.exists(font_path):
font_id = QFontDatabase.addApplicationFont(font_path)
if font_id != -1:
font_family = QFontDatabase.applicationFontFamilies(font_id)[0]
# 创建与UI_install.py中完全相同的菜单字体
menu_font = QFont(font_family, 14) # 字体大小为14
menu_font.setBold(True) # 设置粗体
# 如果以上方法失败则尝试从ui获取字体
if not menu_font and hasattr(self.ui, 'menu') and self.ui.menu:
menu_font = self.ui.menu.font()
# 如果仍然没有获取到,使用默认字体
if not menu_font:
menu_font = QFont(font_family, 14)
menu_font.setBold(True)
except:
# 如果出错,使用默认字体
menu_font = QFont(font_family, 14)
menu_font.setBold(True)
# 创建开发者选项子菜单
self.dev_menu = QMenu("开发者选项", self.main_window)
self.dev_menu.setFont(menu_font) # 设置与UI_install.py中相同的字体
# 使用和主菜单相同的样式,直接指定字体族、字体大小和粗细
menu_style = f"""
QMenu {{
background-color: #E96948;
color: white;
font-family: "{font_family}";
font-size: 14px;
font-weight: bold;
border: 1px solid #F47A5B;
padding: 8px;
border-radius: 6px;
margin-top: 2px;
}}
QMenu::item {{
padding: 6px 20px 6px 15px;
background-color: transparent;
min-width: 120px;
color: white;
font-family: "{font_family}";
font-size: 14px;
font-weight: bold;
}}
QMenu::item:selected {{
background-color: #F47A5B;
border-radius: 4px;
}}
QMenu::separator {{
height: 1px;
background-color: #F47A5B;
margin: 5px 15px;
}}
QMenu::item:checked {{
background-color: #D25A3C;
border-radius: 4px;
}}
"""
self.dev_menu.setStyleSheet(menu_style)
# 创建Debug模式选项并添加到开发者选项子菜单中
self.debug_action = QAction("Debug模式", self.main_window, checkable=True) self.debug_action = QAction("Debug模式", self.main_window, checkable=True)
self.debug_action.setFont(menu_font) # 设置相同的字体
# 安全地获取config属性 # 安全地获取config属性
config = getattr(self.main_window, 'config', {}) config = getattr(self.main_window, 'config', {})
@@ -75,16 +154,24 @@ class UIManager:
if hasattr(self.main_window, 'toggle_debug_mode'): if hasattr(self.main_window, 'toggle_debug_mode'):
self.debug_action.triggered.connect(self.main_window.toggle_debug_mode) self.debug_action.triggered.connect(self.main_window.toggle_debug_mode)
# 添加到菜单 # 创建狂暴下载选项(无功能)
self.ui.menu.addAction(self.debug_action) self.turbo_download_action = QAction("狂暴下载", self.main_window)
self.turbo_download_action.setFont(menu_font) # 设置自定义字体
self.turbo_download_action.setEnabled(False) # 禁用按钮
# 添加到开发者选项子菜单
self.dev_menu.addAction(self.debug_action)
self.dev_menu.addAction(self.turbo_download_action)
# 为未来功能预留的"切换下载源"按钮 # 为未来功能预留的"切换下载源"按钮
self.switch_source_action = QAction("切换下载源", self.main_window) self.switch_source_action = QAction("切换下载源", self.main_window)
self.switch_source_action.setFont(menu_font) # 设置自定义字体
self.switch_source_action.setEnabled(False) # 暂时禁用 self.switch_source_action.setEnabled(False) # 暂时禁用
self.ui.menu.addAction(self.switch_source_action)
# 添加分隔符 # 添加到主菜单
self.ui.menu.addAction(self.switch_source_action)
self.ui.menu.addSeparator() self.ui.menu.addSeparator()
self.ui.menu.addMenu(self.dev_menu) # 添加开发者选项子菜单
# 连接按钮点击事件,如果使用按钮式菜单 # 连接按钮点击事件,如果使用按钮式菜单
if hasattr(self.ui, 'settings_btn'): if hasattr(self.ui, 'settings_btn'):

View File

@@ -215,39 +215,48 @@ class Ui_MainWindows(object):
self.menu.setObjectName(u"menu") self.menu.setObjectName(u"menu")
self.menu.setTitle("设置") self.menu.setTitle("设置")
self.menu.setFont(menu_font) self.menu.setFont(menu_font)
self.menu.setStyleSheet(""" # 创建菜单样式表,直接在样式表中指定字体族
QMenu { menu_style = f"""
QMenu {{
background-color: #E96948; background-color: #E96948;
color: white; color: white;
font-size: 16px; font-family: "{font_family}";
font-size: 14px;
font-weight: bold; font-weight: bold;
border: 1px solid #F47A5B; border: 1px solid #F47A5B;
padding: 8px; padding: 8px;
border-radius: 6px; border-radius: 6px;
margin-top: 2px; margin-top: 2px;
} }}
QMenu::item { QMenu::item {{
padding: 6px 20px 6px 15px; padding: 6px 20px 6px 15px;
background-color: transparent; background-color: transparent;
min-width: 120px; min-width: 120px;
color: white; color: white;
} font-family: "{font_family}";
QMenu::item:selected { font-weight: bold;
}}
QMenu::item:selected {{
background-color: #F47A5B; background-color: #F47A5B;
border-radius: 4px; border-radius: 4px;
} }}
QMenu::separator { QMenu::separator {{
height: 1px; height: 1px;
background-color: #F47A5B; background-color: #F47A5B;
margin: 5px 15px; margin: 5px 15px;
} }}
""") QMenu::item:checked {{
background-color: #D25A3C;
border-radius: 4px;
}}
"""
self.menu.setStyleSheet(menu_style)
self.menu_2 = QMenu(self.content_container) self.menu_2 = QMenu(self.content_container)
self.menu_2.setObjectName(u"menu_2") self.menu_2.setObjectName(u"menu_2")
self.menu_2.setTitle("帮助") self.menu_2.setTitle("帮助")
self.menu_2.setFont(menu_font) self.menu_2.setFont(menu_font)
self.menu_2.setStyleSheet(self.menu.styleSheet()) self.menu_2.setStyleSheet(menu_style)
# 连接按钮点击事件到显示对应菜单 # 连接按钮点击事件到显示对应菜单
self.settings_btn.clicked.connect(lambda: self.show_menu(self.menu, self.settings_btn)) self.settings_btn.clicked.connect(lambda: self.show_menu(self.menu, self.settings_btn))

View File

@@ -49,6 +49,7 @@ class DownloadThread(QThread):
aria2c_path, aria2c_path,
] ]
# 将所有的优化参数应用于每个下载任务
command.extend([ command.extend([
'--dir', download_dir, '--dir', download_dir,
'--out', file_name, '--out', file_name,
@@ -74,8 +75,14 @@ class DownloadThread(QThread):
'--timeout=60', '--timeout=60',
'--auto-file-renaming=false', '--auto-file-renaming=false',
'--allow-overwrite=true', '--allow-overwrite=true',
'--split=16', # 优化参数 - 使用aria2允许的最佳设置
'--max-connection-per-server=16' '--split=128', # 增加分片数到128
'--max-connection-per-server=16', # 最大允许值16
'--min-split-size=1M', # 减小最小分片大小
'--optimize-concurrent-downloads=true', # 优化并发下载
'--file-allocation=none', # 禁用文件预分配加快开始
'--async-dns=true', # 使用异步DNS
'--disable-ipv6=true' # 禁用IPv6提高速度
]) ])
# 证书验证现在总是需要因为我们依赖hosts文件 # 证书验证现在总是需要因为我们依赖hosts文件