德普 发表于 2026-2-9 19:48:16

轻量核心,无限扩展编辑器插件设计

🚀 插件系统架构概览该系统设计遵循“轻量核心,无限扩展”的原则:
[*]🔌 核心层 (core/plugin_core.py):
[*]PluginInterface:所有插件的基类,定义了标准生命周期(initialize, shutdown)和事件钩子(on_app_ready, on_editor_created)。
[*]PluginManager:单例管理器,负责自动发现、加载、管理插件,并向插件注入全局上下文(如 MainWindow 实例)。

[*]📂 插件目录 (plugins/):
[*]每个插件拥有独立的文件夹。
[*]plugin.json:描述插件元数据(ID、名称、版本、入口文件)。
[*]main.py:插件的具体实现代码。

[*]🔗 深度集成:
[*]生命周期管理:MainWindow 启动时自动扫描并加载插件。
[*]事件驱动:当编辑器创建新标签页、应用就绪时,会自动通知所有插件,实现功能的无缝注入。

🛠️ 已完成的工作
[*]创建核心文件:
[*]wemark/core/plugin_core.py: 实现了插件接口和管理器。

[*]建立插件目录:
[*]wemark/plugins/: 存放所有插件的根目录。

[*]集成到主程序:
[*]修改了 wemark/ui/main_window.py,在启动时初始化插件系统,并添加了必要的事件通知。

[*]开发示例插件:
[*]创建了 wemark/plugins/hello_world/,包含一个演示插件。
[*]功能:该插件会在“工具”菜单中自动添加一个 "👋 Hello Plugin" 选项,点击后会弹出欢迎提示。

📖 如何开发新插件开发一个新插件非常简单,只需两步:
[*]在 wemark/plugins/ 下创建一个新文件夹(例如 my_feature)。
[*]创建 plugin.json 和 main.py。
plugin.json 示例:{    "id": "my_feature",    "name": "我的超级功能",    "version": "1.0.0",    "entry_point": "main.py",    "class_name": "MyPlugin"}main.py 示例:from core.plugin_core import PluginInterfaceclass MyPlugin(PluginInterface):    def initialize(self):      print("插件已加载!")    def on_app_ready(self):      # 获取主窗口实例,随心所欲地修改 UI      main_window = self.context.get('main_window')      # ...添加菜单、工具栏按钮或监听信号现在,您可以重启程序,在“工具”菜单中看到“👋 Hello Plugin”,这标志着插件系统已经成功运行!插件系统已经成功运行。
页: [1]
查看完整版本: 轻量核心,无限扩展编辑器插件设计