#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ MagicWord - MarkText风格启动器 基于MarkText开源编辑器的现代化Markdown编辑器 集成MagicWord现有功能:学习模式、天气、名言等 """ import sys import os import platform import traceback # 添加项目根目录到Python路径 project_root = os.path.dirname(os.path.abspath(__file__)) src_path = os.path.join(project_root, 'src') sys.path.insert(0, project_root) sys.path.insert(0, src_path) # 设置Qt平台插件路径 def setup_qt_environment(): """设置Qt环境变量""" system = platform.system() python_version = f"python{sys.version_info.major}.{sys.version_info.minor}" possible_paths = [] if system == "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'), ]) elif system == "Darwin": # 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', '/opt/homebrew/opt/qt5/plugins', ]) elif system == "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', ]) for path in possible_paths: if os.path.exists(path) and os.path.exists(os.path.join(path, 'platforms')): os.environ['QT_PLUGIN_PATH'] = path os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = os.path.join(path, 'platforms') if system == "Darwin": os.environ['QT_QPA_PLATFORM'] = 'cocoa' os.environ['QT_MAC_WANTS_LAYER'] = '1' elif system == "Windows": os.environ['QT_QPA_PLATFORM'] = 'windows' elif system == "Linux": os.environ['QT_QPA_PLATFORM'] = 'xcb' print(f"✅ Qt插件路径设置成功: {path}") return True print("⚠️ 警告:未找到Qt插件路径") return False # 检查依赖 def check_dependencies(): """检查必要的依赖""" missing_deps = [] try: import PyQt5 except ImportError: missing_deps.append("PyQt5") try: import requests except ImportError: missing_deps.append("requests") try: import docx except ImportError: missing_deps.append("python-docx") try: import fitz # PyMuPDF except ImportError: missing_deps.append("PyMuPDF") if missing_deps: print(f"❌ 缺少依赖包: {', '.join(missing_deps)}") print("请运行: pip install " + " ".join(missing_deps)) return False return True def main(): """主函数""" try: print("🚀 启动MagicWord - MarkText风格编辑器") # 检查依赖 if not check_dependencies(): sys.exit(1) # 设置Qt环境 setup_qt_environment() # 导入Qt相关模块 from PyQt5.QtWidgets import QApplication from PyQt5.QtCore import Qt from PyQt5.QtGui import QIcon # 设置高DPI支持 QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True) # 创建应用 app = QApplication(sys.argv) app.setApplicationName("MagicWord") app.setApplicationVersion("1.0.0") app.setOrganizationName("MagicWord") # 设置样式 if platform.system() != "Darwin": app.setStyle('Fusion') # 设置图标 icon_path = os.path.join(project_root, 'resources', 'icons', 'app_icon.png') if os.path.exists(icon_path): app.setWindowIcon(QIcon(icon_path)) # 导入并创建MarkText主窗口 try: from main import MarkTextMainWindow main_window = MarkTextMainWindow() print("✅ MarkText编辑器启动成功!") except ImportError as e: print(f"❌ MarkText编辑器导入失败: {e}") print("正在尝试启动Word风格编辑器...") try: from word_main_window import WordStyleMainWindow main_window = WordStyleMainWindow() print("✅ Word风格编辑器启动成功!") except ImportError as e2: print(f"❌ Word风格编辑器也启动失败: {e2}") sys.exit(1) # 显示窗口 main_window.show() # 运行应用 exit_code = app.exec_() print(f"👋 应用已退出,退出码: {exit_code}") sys.exit(exit_code) except KeyboardInterrupt: print("\n👋 用户中断,正在退出...") sys.exit(0) except Exception as e: print(f"❌ 发生未预期的错误: {e}") traceback.print_exc() sys.exit(1) if __name__ == "__main__": main()