|
本帖最后由 piaomusic 于 2025-7-6 20:54 编辑
def get_screen_resolution():
"""获取屏幕分辨率并返回分辨率级别"""
try:
user32 = ctypes.windll.user32
width = user32.GetSystemMetrics(0)
height = user32.GetSystemMetrics(1)
# 根据宽度判断分辨率级别
if width >= 3840: # 4K
return "4k"
elif width >= 2560: # 2K
return "2k"
elif width >= 1920: # 1080p
return "1080p"
else: # 低于1080p
return "low"
except:
return "1080p" # 默认返回1080p
def get_scaling_factor(resolution):
"""根据分辨率返回缩放因子"""
scaling_factors = {
"4k": 1.8,
"2k": 1.4,
"1080p": 1.0,
"low": 0.9
}
return scaling_factors.get(resolution, 1.0)
class ToolboxApp:
"""工具箱主应用程序"""
DEFAULT_CONFIG = {
'标题栏背景色': '#2E2E2E', '标题栏文字色': '#FFFFFF', '导航栏背景色': '#F0F0F0',
'内容区背景色': '#FFFFFF', '按钮背景色': '#FFFFFF', '按钮文字色': '#000000',
'按钮边框色': '#CCCCCC', '按钮激活背景色': '#E0E0E0', '图标文字间距': 5,
'标题': '我的工具箱', '标题字体': '微软雅黑',
'导航栏字体': '微软雅黑', '按钮字体': '微软雅黑',
'导航栏顶部间距': 10, '按钮水平内边距': 15, '按钮垂直内边距': 5
}
PROTECTED_METADATA = {
'作者': '缘起性空', '版本': '3.1.2025.0701', '联系': '32897251@qq.com','说明': '本工具仅供技术交流使用','更新URL': 'https://www.123912.com/s/sj4rVv-PSJVH'
}
def __init__(self, master: tk.Tk):
self.resolution = get_screen_resolution()
self.scaling_factor = get_scaling_factor(self.resolution)
self.master = master
self._set_resolution_based_config()
self.base_path = self._get_base_path()
self._create_required_dirs()
self._extract_icons()
self.config = self.DEFAULT_CONFIG.copy()
self.tools = {}
self.icons = {}
self.running_tools = {}
self.tool_lock = Lock()
self.current_section = None
self.selected_button = None
self.selected_button_name = None
self._last_config_mtime = None
self._toolbox_manager_window = None
self._initialize_app()
self._setup_navigation_context_menu()
self._auto_match_icons()
def _set_resolution_based_config(self):
"""根据分辨率设置默认配置"""
# 基础值 (1080p)
base_values = {
'图标大小': 48,
'窗口宽度': 900,
'窗口高度': 600,
'每行工具数': 3,
'标题字体大小': 16,
'导航栏字体大小': 13,
'IP字体大小': 13,
'按钮字体大小': 12,
'标题栏高度': 50,
'导航栏宽度': 160,
'导航按钮间距': 5,
'按钮宽度': 16
}
# 根据缩放因子调整值
for key, value in base_values.items():
if key in ['每行工具数']: # 这些值不需要缩放
self.DEFAULT_CONFIG[key] = value
else:
self.DEFAULT_CONFIG[key] = int(value * self.scaling_factor)
# 特殊调整
if self.resolution == "4k":
self.DEFAULT_CONFIG['每行工具数'] = 5
self.DEFAULT_CONFIG['导航栏宽度'] = 200
elif self.resolution == "2k":
self.DEFAULT_CONFIG['每行工具数'] = 4
self.DEFAULT_CONFIG['导航栏宽度'] = 180
elif self.resolution == "low":
self.DEFAULT_CONFIG['每行工具数'] = 2
self.DEFAULT_CONFIG['导航栏宽度'] = 140
def get_scaling_factor(resolution):
"""根据分辨率返回缩放因子"""
scaling_factors = {
"4k": 1.8, # 3840x2160
"2k": 1.4, # 2560x1440
"1080p": 1.0, # 1920x1080
"low": 0.9 # 低于1080p
}
return scaling_factors.get(resolution, 1.0)
def _apply_resolution_adjustments(self, config):
"""应用分辨率调整(基于1080p标准配置)"""
resolution = get_screen_resolution()
# 基准配置(1080p)
base_config = {
'1080p': {
'图标大小': 48,
'窗口宽度': 900,
'窗口高度': 600,
'每行工具数': 3,
'标题字体大小': 16,
'导航栏字体大小': 13,
'IP字体大小': 13,
'按钮字体大小': 12,
'标题栏高度': 50,
'导航栏宽度': 160,
'按钮宽度': 16,
'导航按钮间距': 5,
'按钮水平内边距': 15,
'按钮垂直内边距': 5
},
# 2K配置(基于1080p的1.33倍缩放)
'2k': {
'图标大小': 64,
'窗口宽度': 1200,
'窗口高度': 800,
'每行工具数': 4,
'标题字体大小': 18,
'导航栏字体大小': 15,
'IP字体大小': 15,
'按钮字体大小': 14,
'标题栏高度': 60,
'导航栏宽度': 200,
'按钮宽度': 18,
'导航按钮间距': 6,
'按钮水平内边距': 18,
'按钮垂直内边距': 6
},
# 4K配置(基于1080p的1.78倍缩放)
'4k': {
'图标大小': 72,
'窗口宽度': 1400,
'窗口高度': 900,
'每行工具数': 5,
'标题字体大小': 20,
'导航栏字体大小': 16,
'按钮字体大小': 14,
'标题栏高度': 65,
'导航栏宽度': 220,
'按钮宽度': 20,
'导航按钮间距': 7,
'按钮水平内边距': 20,
'按钮垂直内边距': 7
}
}
# 应用调整(如果分辨率匹配则覆盖配置)
if resolution in base_config:
config.update(base_config[resolution])
logger.info(f"已应用 {resolution} 分辨率优化配置")
根据分辨率自动调整的代码。我没有测试环境,需要你自己编译。只有版本2带自动调整功能,版本1是不带的,可以自己设置。 |
|