Files
model_team_tools/core/plugin/plugins.py
T
feifei.xu 1b6796ec43 docs: 完善README文档与架构图,修复全量注释与日志问题
- README: 补充项目概述、技术栈、架构图(Mermaid)、插件生命周期时序图
- build.py: 补充模块和函数 docstring
- core/__init__.py: 修正模块说明(工具箱→插件系统)
- log.py: 修复过时注释,清理死代码,抑制第三方库日志刷屏
- plugin_registry.py: 修正矛盾注释,补充缺失日志,隐藏远程路径
- plugins.py: 修正过时注释,清理死代码和无用导入
- plugins_card.py: 修正错误类名注释,补充全量 docstring
- main.py: 修正错误注释,补充启动/退出/插件加载日志
2026-07-21 17:04:34 +08:00

104 lines
3.7 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.
"""
插件管理模块
提供插件管理主窗口,包含插件卡片列表和安装/更新/卸载入口。
使用 PySide6 构建的窗口框架。
主要功能:
- 插件管理窗口界面
- 插件卡片列表渲染与状态刷新
- 插件事件的转发与处理
Author: Model Team
Version: 0.0.1
"""
import logging
from qt_material import apply_stylesheet
from .plugins_ui import Ui_FormPlugins
from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QWidget, QListWidgetItem
from PySide6.QtCore import QSize
from .plugins_card import PluginsCard
from .plugin_registry import PluginRegistry
logger = logging.getLogger(__name__)
class Plugins(QWidget, Ui_FormPlugins):
"""插件管理窗口。
继承自 QWidget 和 Ui_FormPluginsQt Designer 生成的 UI 界面),
负责展示插件卡片列表,处理插件安装/更新/卸载事件的转发。
可作为独立窗口或嵌入其他窗口使用。
"""
def __init__(self, plugin_registry: PluginRegistry, parent: QWidget = None) -> None:
"""初始化插件管理窗口。
Args:
plugin_registry: 插件注册中心实例,用于事件转发
parent: 父窗口对象,默认为 None(顶级窗口)
"""
super().__init__(parent)
self.setupUi(self)
self.plugin_registry = plugin_registry
self.cards: dict = {}
self.initUI()
self.load_stylesheet()
self.plugin_registry.update_plugins_card_signal.connect(self.on_update_plugins_card)
self.plugin_registry.uninstall_completed_signal.connect(self.on_plugin_uninstalled)
def initUI(self) -> None:
"""初始化窗口标题和图标。"""
self.setWindowTitle("工具箱")
self.setWindowIcon(QIcon('resources/tools.ico'))
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_update_plugins_card(self, plugins: dict) -> None:
for name in plugins.keys():
if name in self.cards:
# 卡片已存在,只刷新状态(避免重复创建叠加)
self.cards[name].info = plugins[name]
self.cards[name].refresh()
else:
item = QListWidgetItem(self.listWidget)
plugin_card = PluginsCard(name, plugins[name])
plugin_card.send_event_signal.connect(self.plugin_registry.start_plugins_event)
self.cards[name] = plugin_card
item.setSizeHint(QSize(plugin_card.sizeHint().width(), 200))
self.listWidget.addItem(item)
self.listWidget.setCurrentItem(item)
self.listWidget.setItemWidget(item, plugin_card)
def on_plugin_uninstalled(self, name: str) -> None:
"""卸载完成后刷新对应卡片状态。"""
card = self.cards.get(name)
if card is not None:
card.refresh()