Files
model_team_tools/main.py
T
2026-07-17 15:27:33 +08:00

131 lines
4.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Model Team Tools - 主程序入口
应用程序主窗口的初始化和配置模块
使用 PySide6 构建的桌面应用程序框架
主要功能:
- 初始化 Qt 主窗口
- 加载 Qt Material 样式表
- 配置菜单栏和状态栏
- 提供统一的日志记录接口
"""
import os
import sys
import logging
import core
import traceback
import importlib
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}"
LOCAL_PLUGINS_PATH = Path("./plugins")
class MainWindow(QMainWindow, Ui_MainWindow):
"""
主窗口类
继承自 QMainWindowQt 主窗口基类)和 Ui_MainWindowQt Designer 生成的 UI 界面)
负责应用程序主窗口的初始化、样式配置和界面布局
"""
def __init__(self) -> None:
super().__init__()
self.setupUi(self)
self.plugin_registry = core.PluginRegistry()
self.plugins = core.Plugins(self.plugin_registry)
self.plugin_registry.plugins_loader_signal.connect(self.on_plugins_loader)
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.plugins.show()
except Exception as e:
logger.error(f"无法打开工具箱窗口: {e}")
logger.error(traceback.format_exc())
def on_plugins_loader(self, plugins:dict):
for name in plugins.keys():
self.stackedWidget.addWidget(plugins[name]['obj'])
if __name__ == '__main__':
app = QApplication(sys.argv)
main: MainWindow = MainWindow()
main.show()
sys.exit(app.exec())