|
|
#!/usr/bin/env python3
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
"""
|
|
|
扫雷游戏测试脚本
|
|
|
用于测试扫雷游戏模块是否能正常运行
|
|
|
"""
|
|
|
|
|
|
import sys
|
|
|
import os
|
|
|
import platform
|
|
|
|
|
|
# 添加项目根目录到Python路径
|
|
|
project_root = os.path.dirname(os.path.abspath(__file__))
|
|
|
sys.path.insert(0, project_root)
|
|
|
|
|
|
# 设置Qt平台插件路径 - 增强版本,完全避免平台插件问题
|
|
|
def set_qt_plugin_path():
|
|
|
"""设置Qt平台插件路径,确保所有平台插件都能正确加载"""
|
|
|
system = platform.system()
|
|
|
|
|
|
# 获取Python版本
|
|
|
python_version = f"python{sys.version_info.major}.{sys.version_info.minor}"
|
|
|
|
|
|
# 可能的Qt插件路径列表
|
|
|
possible_paths = []
|
|
|
|
|
|
if system == "Windows":
|
|
|
# Windows环境下的路径
|
|
|
possible_paths.extend([
|
|
|
os.path.join(project_root, '.venv', 'Lib', 'site-packages', 'PyQt5', 'Qt5', 'plugins'),
|
|
|
os.path.join(sys.prefix, 'Lib', 'site-packages', 'PyQt5', 'Qt5', 'plugins'),
|
|
|
os.path.join(os.path.expanduser('~'), 'AppData', 'Local', 'Programs', 'Python', 'Python39', 'Lib', 'site-packages', 'PyQt5', 'Qt5', 'plugins'),
|
|
|
os.path.join(os.path.expanduser('~'), 'AppData', 'Roaming', 'Python', 'Python39', 'site-packages', 'PyQt5', 'Qt5', 'plugins'),
|
|
|
])
|
|
|
elif system == "Darwin": # macOS
|
|
|
# macOS环境下的路径
|
|
|
possible_paths.extend([
|
|
|
os.path.join(project_root, '.venv', 'lib', python_version, 'site-packages', 'PyQt5', 'Qt5', 'plugins'),
|
|
|
os.path.join(sys.prefix, 'lib', python_version, 'site-packages', 'PyQt5', 'Qt5', 'plugins'),
|
|
|
'/usr/local/opt/qt5/plugins', # Homebrew Qt5
|
|
|
'/opt/homebrew/opt/qt5/plugins', # Apple Silicon Homebrew
|
|
|
os.path.expanduser('~/Qt/5.15.2/clang_64/plugins'), # Qt官方安装
|
|
|
])
|
|
|
elif system == "Linux":
|
|
|
# Linux环境下的路径
|
|
|
possible_paths.extend([
|
|
|
os.path.join(project_root, '.venv', 'lib', python_version, 'site-packages', 'PyQt5', 'Qt5', 'plugins'),
|
|
|
os.path.join(sys.prefix, 'lib', python_version, 'site-packages', 'PyQt5', 'Qt5', 'plugins'),
|
|
|
'/usr/lib/x86_64-linux-gnu/qt5/plugins',
|
|
|
'/usr/lib/qt5/plugins',
|
|
|
])
|
|
|
|
|
|
# 查找第一个存在的路径
|
|
|
valid_path = None
|
|
|
for path in possible_paths:
|
|
|
if os.path.exists(path) and os.path.exists(os.path.join(path, 'platforms')):
|
|
|
valid_path = path
|
|
|
break
|
|
|
|
|
|
if valid_path:
|
|
|
# 设置Qt插件路径
|
|
|
os.environ['QT_PLUGIN_PATH'] = valid_path
|
|
|
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = os.path.join(valid_path, 'platforms')
|
|
|
|
|
|
# 设置平台特定的环境变量
|
|
|
if system == "Darwin": # macOS
|
|
|
os.environ['QT_QPA_PLATFORM'] = 'cocoa'
|
|
|
os.environ['QT_MAC_WANTS_LAYER'] = '1'
|
|
|
# 禁用可能导致问题的Qt功能
|
|
|
os.environ['QT_LOGGING_RULES'] = 'qt.qpa.*=false' # 禁用Qt警告日志
|
|
|
elif system == "Windows":
|
|
|
os.environ['QT_QPA_PLATFORM'] = 'windows'
|
|
|
elif system == "Linux":
|
|
|
os.environ['QT_QPA_PLATFORM'] = 'xcb'
|
|
|
# 对于Linux,可能需要设置DISPLAY
|
|
|
if 'DISPLAY' not in os.environ:
|
|
|
os.environ['DISPLAY'] = ':0'
|
|
|
|
|
|
print(f"✅ Qt插件路径设置成功: {valid_path}")
|
|
|
return True
|
|
|
else:
|
|
|
print("⚠️ 警告:未找到Qt插件路径")
|
|
|
return False
|
|
|
|
|
|
# 设置Qt平台插件路径
|
|
|
set_qt_plugin_path()
|
|
|
|
|
|
from PyQt5.QtWidgets import QApplication
|
|
|
from PyQt5.QtCore import Qt
|
|
|
from src.ui.minesweeper_game import MinesweeperWindow
|
|
|
|
|
|
def main():
|
|
|
# 设置高DPI支持(必须在QApplication创建之前)
|
|
|
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
|
|
|
QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
|
|
|
|
|
|
app = QApplication(sys.argv)
|
|
|
|
|
|
# 设置应用程序样式
|
|
|
if platform.system() != "Darwin": # 不是macOS系统
|
|
|
app.setStyle('WindowsVista')
|
|
|
|
|
|
# 创建并显示扫雷游戏窗口
|
|
|
window = MinesweeperWindow()
|
|
|
window.show()
|
|
|
|
|
|
sys.exit(app.exec_())
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
main() |