找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 6|回复: 0

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

[复制链接]

1

主题

0

回帖

3

积分

新手上路

积分
3
发表于 昨天 19:48 | 显示全部楼层 |阅读模式
🚀 插件系统架构概览
该系统设计遵循“轻量核心,无限扩展”的原则:
  • 🔌 核心层 (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”,这标志着插件系统已经成功运行!插件系统已经成功运行。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|一起港湾 ( 青ICP备2025004122号-1 )

GMT+8, 2026-2-10 10:17 , Processed in 0.105162 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表