|
|
# main.py
|
|
|
import sys
|
|
|
import traceback
|
|
|
import os
|
|
|
import platform
|
|
|
|
|
|
# 添加项目根目录到Python路径
|
|
|
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
|
sys.path.insert(0, project_root)
|
|
|
|
|
|
# 设置Qt平台插件路径 - 根据操作系统设置正确的Qt插件路径
|
|
|
def set_qt_plugin_path():
|
|
|
system = platform.system()
|
|
|
|
|
|
if system == "Windows":
|
|
|
# Windows环境下查找Qt插件路径
|
|
|
# 首先检查虚拟环境中的Qt插件
|
|
|
venv_qt_plugins_path = os.path.join(project_root, '.venv', 'Lib', 'site-packages', 'PyQt5', 'Qt5', 'plugins')
|
|
|
if os.path.exists(venv_qt_plugins_path):
|
|
|
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = venv_qt_plugins_path
|
|
|
return
|
|
|
|
|
|
# 检查全局Python安装中的Qt插件
|
|
|
global_qt_plugins_path = os.path.join(sys.prefix, 'Lib', 'site-packages', 'PyQt5', 'Qt5', 'plugins')
|
|
|
if os.path.exists(global_qt_plugins_path):
|
|
|
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = global_qt_plugins_path
|
|
|
return
|
|
|
|
|
|
# 尝试在常见的Windows PyQt5安装路径中查找
|
|
|
common_paths = [
|
|
|
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'),
|
|
|
]
|
|
|
|
|
|
for path in common_paths:
|
|
|
if os.path.exists(path):
|
|
|
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = path
|
|
|
return
|
|
|
|
|
|
elif system == "Darwin": # macOS
|
|
|
# macOS环境下查找Qt插件路径
|
|
|
system_qt_plugins_path = '/usr/local/opt/qt5/plugins' # macOS Homebrew Qt5路径
|
|
|
venv_qt_plugins_path = os.path.join(project_root, '.venv', 'lib', 'python3.9', 'site-packages', 'PyQt5', 'Qt5', 'plugins')
|
|
|
|
|
|
# 优先检查系统Qt插件路径
|
|
|
if os.path.exists(system_qt_plugins_path):
|
|
|
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = system_qt_plugins_path
|
|
|
return
|
|
|
elif os.path.exists(venv_qt_plugins_path):
|
|
|
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = venv_qt_plugins_path
|
|
|
return
|
|
|
|
|
|
elif system == "Linux":
|
|
|
# Linux环境下查找Qt插件路径
|
|
|
venv_qt_plugins_path = os.path.join(project_root, '.venv', 'lib', 'python3.9', 'site-packages', 'PyQt5', 'Qt5', 'plugins')
|
|
|
global_qt_plugins_path = os.path.join(sys.prefix, 'lib', 'python3.9', 'site-packages', 'PyQt5', 'Qt5', 'plugins')
|
|
|
|
|
|
if os.path.exists(venv_qt_plugins_path):
|
|
|
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = venv_qt_plugins_path
|
|
|
return
|
|
|
elif os.path.exists(global_qt_plugins_path):
|
|
|
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = global_qt_plugins_path
|
|
|
return
|
|
|
|
|
|
# 设置Qt平台插件路径
|
|
|
set_qt_plugin_path()
|
|
|
|
|
|
from PyQt5.QtWidgets import QApplication
|
|
|
from PyQt5.QtCore import Qt
|
|
|
from PyQt5.QtGui import QIcon
|
|
|
from word_main_window import WordStyleMainWindow
|
|
|
|
|
|
# 设置高DPI支持(必须在QApplication创建之前)
|
|
|
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
|
|
|
QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
|
|
|
|
|
|
def main():
|
|
|
"""应用程序入口函数 - Word风格版本"""
|
|
|
try:
|
|
|
# 创建QApplication实例
|
|
|
app = QApplication(sys.argv)
|
|
|
|
|
|
# 设置应用程序样式为Windows风格,更接近Word界面
|
|
|
app.setStyle('WindowsVista')
|
|
|
|
|
|
# 设置应用程序属性
|
|
|
app.setApplicationName("MagicWord")
|
|
|
app.setApplicationVersion("0.2.2")
|
|
|
app.setOrganizationName("MagicWord")
|
|
|
|
|
|
# 设置窗口图标(如果存在)
|
|
|
icon_files = [
|
|
|
'app_icon_32*32.png',
|
|
|
'app_icon_64*64.png',
|
|
|
'app_icon_128*128.png',
|
|
|
'app_icon_256*256.png',
|
|
|
'app_icon.png'
|
|
|
]
|
|
|
|
|
|
icon_path = None
|
|
|
for icon_file in icon_files:
|
|
|
test_path = os.path.join(project_root, 'resources', 'icons', icon_file)
|
|
|
if os.path.exists(test_path):
|
|
|
icon_path = test_path
|
|
|
break
|
|
|
|
|
|
if icon_path and os.path.exists(icon_path):
|
|
|
app.setWindowIcon(QIcon(icon_path))
|
|
|
else:
|
|
|
# 使用默认图标
|
|
|
app.setWindowIcon(QIcon())
|
|
|
|
|
|
# 创建Word风格的主窗口
|
|
|
main_window = WordStyleMainWindow()
|
|
|
main_window.show()
|
|
|
|
|
|
# 启动事件循环并返回退出码
|
|
|
exit_code = app.exec_()
|
|
|
sys.exit(exit_code)
|
|
|
|
|
|
except Exception as e:
|
|
|
# 打印详细的错误信息
|
|
|
print(f"应用程序发生未捕获的异常: {e}")
|
|
|
traceback.print_exc()
|
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
main() |