# PluginMarket **Repository Path**: tf5488/plugin-market ## Basic Information - **Project Name**: PluginMarket - **Description**: 插件工具箱,提供开箱即用的工具集合。 - **Primary Language**: Python - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-09 - **Last Updated**: 2025-12-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PluginMarket 基于 PyQt6 的插件市场桌面应用,实现插件的动态加载、管理和可视化界面。 ## ✨ **核心功能** ### 🧩 **插件管理** - **动态发现** - 自动扫描和加载插件目录中的模块 - **生命周期控制** - 插件启用/禁用/删除管理 - **依赖管理** - 自动复制插件依赖到系统路径 - **配置持久化** - 插件状态和设置的JSON存储 ### 🖥️ **用户界面** - **现代化界面** - 基于 PyQt6 + Fluent Widgets 的美观UI - **插件列表** - 显示插件图标、名称、版本、作者、描述 - **实时控制** - 一键启用/禁用插件开关 - **快速操作** - 文件夹打开、插件删除、配置管理 ### ⚙️ **系统功能** - **路径配置** - 灵活的插件目录设置 - **错误处理** - 插件加载失败时的友好提示 - **线程安全** - 多线程插件加载和执行 - **事件系统** - 插件间通信和状态同步 ## 🏗️ **架构设计** ### **分层架构** ``` ┌─────────────────┐ │ UI 表现层 │ - widget/ (ToolsWindow, PluginPage, SettingInterface) ├─────────────────┤ │ 业务逻辑层 │ - Adapters/ (Plugin, PluginManager, Event) ├─────────────────┤ │ 配置管理层 │ - widget/config/ (config.json) ├─────────────────┤ │ 通用工具层 │ - common/ (utils, resources) └─────────────────┘ ``` ### **核心模块** #### **🔌 Plugin System** - `BasePlugin` - 插件基类抽象接口 - `Plugin` - 具体插件实现 - `PluginLoader` - 动态模块加载器 - `PluginManager` - 插件生命周期管理 #### **🎨 UI Framework** - `ToolsWindow` - 主窗口容器 - `PluginPage` - 插件管理界面 - `SettingInterface` - 系统设置界面 - `CustomMessageBox` - 自定义消息对话框 #### **⚡ Event System** - `BaseEvent` - 事件基类 - `BaseHandler` - 事件处理器 - `Event` - 具体事件实现 ## 📦 **技术栈** | 组件 | 技术选型 | 说明 | |------|----------|------| | **GUI框架** | PyQt6 + qfluentwidgets | 现代化桌面UI | | **插件加载** | `__import__` 动态导入 | 运行时模块加载 | | **配置管理** | QConfig + JSON | 轻量级配置存储 | | **多线程** | QThread | 异步插件操作 | | **路径管理** | shutil + sys.path | 依赖文件处理 | ## 🚀 **快速开始** ### **环境要求** ```bash # Python 3.8+ pip install PyQt6 pip install PyQt6-Fluent-Widgets ``` ### **安装运行** ```bash # 克隆项目 git clone https://gitee.com/tf5488/plugin-market.git cd plugin-market # 运行应用 python main.py ``` ### **插件开发** 1. 在插件目录创建 `.py` 文件 2. 继承 `BasePlugin` 类 3. 实现必要的方法接口 4. 添加 `plugin_info` 元数据 ```python from Adapters.BasePlugin import BasePlugin class MyPlugin(BasePlugin): def __init__(self): super().__init__() self.pluginName = "MyPlugin" def onLoad(self): # 插件加载逻辑 pass def onEnable(self): # 插件启用逻辑 pass ``` ## 📁 **项目结构** ``` plugin-market/ ├── main.py # 应用程序入口 ├── widget/ # UI组件 │ ├── ToolsWindow.py # 主窗口 │ ├── market/ # 插件市场界面 │ ├── setting/ # 设置界面 │ └── config/ # 配置管理 ├── Adapters/ # 核心适配器 │ ├── Plugin.py # 插件管理核心 │ ├── BasePlugin.py # 插件基类 │ └── Event/ # 事件系统 ├── common/ # 通用工具 │ ├── utils.py # 工具函数 │ └── resources/ # 资源文件 └── config.json # 配置文件 ``` ## 🔧 **配置说明** ### **config.json 示例** ```json { "plugin_path": "./plugins", "sys_path": "./sys", "enabled_plugins": ["plugin1", "plugin2"] } ``` ### **配置项说明** - `plugin_path` - 插件根目录 - `sys_path` - 依赖文件存储路径 - `enabled_plugins` - 启用的插件列表 ## 🛠️ **开发指南** ### **插件规范** - 插件必须继承 `BasePlugin` 基类 - 实现 `onLoad()` 和 `onEnable()` 方法 - 提供 `plugin_info` 元数据 - 遵循命名约定和目录结构 ### **扩展开发** - 添加新的UI组件到 `widget/` 目录 - 在 `Adapters/` 中实现业务逻辑 - 使用事件系统实现模块解耦 - 通过配置文件管理应用状态 ## 🐛 **常见问题** **Q: 插件加载失败怎么办?** A: 检查插件代码语法错误,确保继承正确的基类,查看控制台错误信息。 **Q: 如何调试插件?** A: 在插件代码中添加日志输出,使用 `print()` 或 logging 模块。 **Q: 插件依赖如何处理?** A: 系统会自动将依赖复制到配置的 `sys_path` 目录中。 ## 📄 **许可证** 本项目采用 MIT 许可证,详见 [LICENSE](LICENSE) 文件。 ## 🤝 **贡献指南** 欢迎提交 Issue 和 Pull Request! 1. Fork 本项目 2. 创建特性分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 开启 Pull Request