docs: 完善README文档与架构图,修复全量注释与日志问题
- README: 补充项目概述、技术栈、架构图(Mermaid)、插件生命周期时序图 - build.py: 补充模块和函数 docstring - core/__init__.py: 修正模块说明(工具箱→插件系统) - log.py: 修复过时注释,清理死代码,抑制第三方库日志刷屏 - plugin_registry.py: 修正矛盾注释,补充缺失日志,隐藏远程路径 - plugins.py: 修正过时注释,清理死代码和无用导入 - plugins_card.py: 修正错误类名注释,补充全量 docstring - main.py: 修正错误注释,补充启动/退出/插件加载日志
This commit is contained in:
@@ -17,9 +17,6 @@ import subprocess
|
||||
import runtime_hook # noqa: F401 启动时把 plugins/*/ 加进 sys.path,必须在 core 之前
|
||||
import core
|
||||
import traceback
|
||||
import importlib
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from typing import Optional
|
||||
from PySide6.QtCore import QTimer
|
||||
@@ -38,7 +35,6 @@ 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):
|
||||
"""
|
||||
@@ -57,7 +53,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
self.plugin_registry.plugins_loader_signal.connect(self.on_plugins_loader)
|
||||
self.plugin_registry.uninstall_completed_signal.connect(self.on_plugin_uninstalled)
|
||||
|
||||
# 工具栏:插件名称 → QAction 映射
|
||||
self.tool_actions: dict = {}
|
||||
# 内容区:插件名称 → QWidget 映射
|
||||
self.plugin_widgets: dict = {}
|
||||
|
||||
self.initUI()
|
||||
@@ -106,19 +104,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
logger.warning(f"样式加载失败,使用默认主题: {e}")
|
||||
|
||||
def on_tools(self) -> None:
|
||||
"""打开工具箱窗口
|
||||
|
||||
创建并显示工具箱窗口实例。包含完整的错误处理机制,
|
||||
确保任何异常都不会导致主程序崩溃。
|
||||
|
||||
异常处理:
|
||||
- 捕获所有异常并记录到日志
|
||||
- 显示详细的错误堆栈信息
|
||||
- 不影响主窗口的正常使用
|
||||
|
||||
日志记录:
|
||||
- 成功打开工具箱时记录 INFO 级别日志
|
||||
- 打开失败时记录 ERROR 级别日志
|
||||
"""打开插件管理窗口。
|
||||
|
||||
包含完整的错误处理机制,确保任何异常都不会导致主程序崩溃。
|
||||
"""
|
||||
try:
|
||||
self.plugins.show()
|
||||
@@ -126,7 +114,14 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
logger.error(f"无法打开工具箱窗口: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
|
||||
def on_plugins_loader(self, plugins:dict):
|
||||
def on_plugins_loader(self, plugins: dict) -> None:
|
||||
"""加载已安装插件到主窗口工具栏和堆栈页面。
|
||||
|
||||
为每个插件创建 QAction 并添加到工具栏,同时将插件 QWidget
|
||||
添加到 stackedWidget 中,点击 action 时切换对应页面。
|
||||
"""
|
||||
if not plugins:
|
||||
return
|
||||
for name in plugins.keys():
|
||||
action = QAction(name,self)
|
||||
self.toolBar.addAction(action)
|
||||
@@ -136,9 +131,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
self.stackedWidget.addWidget(widget)
|
||||
self.tool_actions[name] = action
|
||||
self.plugin_widgets[name] = widget
|
||||
logger.info(f"已加载 {len(plugins)} 个插件到工具栏: {list(plugins.keys())}")
|
||||
|
||||
def on_action_triggered(self, action:QAction):
|
||||
print(action.text())
|
||||
def on_action_triggered(self, action: QAction) -> None:
|
||||
"""工具栏按钮点击:切换到对应插件的 stack 页面。"""
|
||||
self.stackedWidget.setCurrentWidget(self.plugin_registry.plugins[action.text()]['obj'])
|
||||
|
||||
def on_plugin_uninstalled(self, name: str) -> None:
|
||||
@@ -147,6 +143,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
.pyd 已被进程加载,运行时无法删除(Windows 文件锁),因此重启进程:
|
||||
新进程启动时会先执行待删清单,在 import 之前删除 .pyd 文件。
|
||||
"""
|
||||
logger.info(f"从主窗口移除插件: {name}")
|
||||
action = self.tool_actions.pop(name, None)
|
||||
if action is not None:
|
||||
self.toolBar.removeAction(action)
|
||||
@@ -197,8 +194,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print(f"{APP_NAME} v{APP_VERSION} 启动中...")
|
||||
app = QApplication(sys.argv)
|
||||
main: MainWindow = MainWindow()
|
||||
app.aboutToQuit.connect(lambda: logger.info(f"{APP_NAME} 退出"))
|
||||
app.aboutToQuit.connect(main.plugin_registry.shutdown)
|
||||
main.show()
|
||||
sys.exit(app.exec())
|
||||
Reference in New Issue
Block a user