""" Model Team Tools - 主程序入口 应用程序主窗口的初始化和配置模块 使用 PySide6 构建的桌面应用程序框架 主要功能: - 初始化 Qt 主窗口 - 加载 Qt Material 样式表 - 配置菜单栏和状态栏 - 提供统一的日志记录接口 """ import sys import importlib import logging import core import traceback from pathlib import Path from typing import Optional from PySide6.QtGui import QIcon from PySide6.QtWidgets import QApplication, QMainWindow, QMenuBar, QStatusBar,QFileDialog from qt_material import apply_stylesheet from main_ui import Ui_MainWindow # 获取模块日志记录器 logger = logging.getLogger(__name__) # 版本号常量 MAJOR_VER: int = 0 # 主版本号 MINOR_VER: int = 0 # 次版本号 MICRO_VER: int = 1 # 修订版本号 APP_NAME: str = "Model Team Tools" APP_VERSION: str = f"{MAJOR_VER}.{MINOR_VER}.{MICRO_VER}" class MainWindow(QMainWindow, Ui_MainWindow): """ 主窗口类 继承自 QMainWindow(Qt 主窗口基类)和 Ui_MainWindow(Qt Designer 生成的 UI 界面) 负责应用程序主窗口的初始化、样式配置和界面布局 """ def __init__(self) -> None: super().__init__() self.setupUi(self) self.initUI() def initUI(self) -> None: """ 初始化用户界面组件 执行以下初始化操作: - 加载 Qt 样式表和自定义样式 - 设置窗口标题 - 配置菜单栏 - 配置状态栏 - 记录初始化日志 注意:此方法在主窗口创建后调用 """ self.load_stylesheet() self.setWindowTitle(APP_NAME) self.setWindowIcon(QIcon('resources/main.ico')) self.menubar: Optional[QMenuBar] = self.menuBar() self.statusbar: QStatusBar = self.statusBar() self.statusbar.showMessage(f"Version: {APP_VERSION}") self.action_tools.triggered.connect(self.on_tools) def load_stylesheet(self) -> None: """ 加载 Qt 样式表和自定义样式文件 使用 qt_material 库加载暗色主题,并应用自定义 QSS 样式表 失败时记录错误日志,但不影响应用继续运行(降级策略) 异常处理: - FileNotFoundError: 样式文件不存在 - RuntimeError: 主题加载失败 - 其他异常: 记录警告但不中断应用 """ try: apply_stylesheet(self, style=None,theme='dark_teal.xml', css_file='resources/my.qss') except FileNotFoundError as e: logger.warning(f"样式文件未找到,使用默认主题: {e}") except RuntimeError as e: logger.warning(f"主题加载失败,使用默认主题: {e}") except Exception as e: logger.warning(f"样式加载失败,使用默认主题: {e}") def on_tools(self) -> None: """打开工具箱窗口 创建并显示工具箱窗口实例。包含完整的错误处理机制, 确保任何异常都不会导致主程序崩溃。 异常处理: - 捕获所有异常并记录到日志 - 显示详细的错误堆栈信息 - 不影响主窗口的正常使用 日志记录: - 成功打开工具箱时记录 INFO 级别日志 - 打开失败时记录 ERROR 级别日志 """ try: self.tools = core.ToolsWindow() self.tools.show() logger.info("工具箱窗口已打开") except Exception as e: logger.error(f"无法打开工具箱窗口: {e}") logger.error(traceback.format_exc()) if __name__ == '__main__': app = QApplication(sys.argv) main: MainWindow = MainWindow() main.show() sys.exit(app.exec())