导入插件(Qt)

在宿主配置中启用插件管理页:

config = {"plugin": True}

plugin 默认为 False,控制是否显示“插件”管理页。已有 ok_import/ 插件仍按原有方式加载。管理页和自定义 Qt 页面仅用于桌面模式,Web 与无界面 运行时不会实例化 Qt 页面。

安装和删除

两个添加按钮均先显示与脚本导入相同的发布者风险提示,需要勾选确认并等待 15 秒倒计时后才能继续安装。

  • 从 ZIP 添加:选择本地 .zip 或 .okscript 文件。
  • 从 GitHub 添加:输入 https://github.com/owner/repository 或 owner/repository。在最近 20 个发布版本中查找带 .zip / .okscript 附件的最新稳定版;没有合适的稳定版时使用预发布版。多个附件可手动选择。 不会自动使用 GitHub 生成的源代码压缩包。
  • 删除插件:关闭插件页面及任务,再删除 ok_import/ 中的安装目录。 插件应将持久化用户数据放在宿主配置或数据目录中,不要放在安装目录里。

例如 https://github.com/hxwd94666/WW-Echo-Workshop 的发行 ZIP 内含 echo-workshop/manifest.json。支持这种单层目录包装,也支持将 manifest 直接放在 压缩包根目录。安装相同 ID 的包会先关闭旧页面和任务服务,再替换文件。 下载和解压在后台执行;任务和 Qt 页面在 GUI 线程初始化。发行包应包含所需 Python 包、资源及原生二进制,安装过程不运行构建脚本或 pip。

GitHub 更新

通过 GitHub 添加的插件会保存仓库、发行标签和所选附件,重启后仍可使用 “检查更新”按钮。插件加载后 10 秒会自动在后台检查一次,安装或重新加载后同样适用。 正在执行安装时,自动检查会延后至操作结束。

仅提供严格高于已安装版本的更新;优先使用 manifest 中的版本,缺省时使用保存的 发行标签,支持数字版本及 v 前缀。相同或更旧版本不会提示更新,无法比较的版本 会显示检查错误。发现更新后可点击“更新至 …”,确认导入提示后下载并安装。 自动检查不会自动安装更新,更新包必须匹配插件 ID 且包含更高版本。

本地安装的插件不显示 GitHub 检查按钮。此前未保存来源的插件需要通过 GitHub 重新添加一次,才能启用更新检查。

任务与自定义页

在 manifest.json 中声明任务、自定义 Qt 页,或同时声明两者:

{
  "file_name": "my-plugin",
  "script_name": "我的插件",
  "version": "1.0.0",
  "tasks": [["plugin_tasks", "MyTask"]],
  "custom_tabs": [["plugin_page", "MyTab"]]
}

入口格式为 [模块名, 类名],支持 ui.main 等嵌套模块,模块相对于插件目录。 任务继承 BaseTask 或 TriggerTask,均显示在插件标准任务页;自定义页获得独立导航。 不声明 tasks 时沿用扫描根目录 .py 文件的方式;纯页面插件应声明 "tasks": []。 custom_tabs 默认为空列表,自定义页模块由 Qt 适配层加载。

自定义页继承 ok.ui.qt.widget.CustomTab.CustomTab,提供 name、icon 和页面内容。 宿主在构造后设置 executor,负责导航和销毁。页面可提供 dispose() 或 stop_worker() 释放订阅及后台工作。完整代码示例见英文说明。

导入任务卸载时调用 on_destroy();修改任务代码后重新加载整个插件,避免页面保留 旧任务实例。单个自定义页加载失败不会阻止其他页面,错误会显示在管理页。

兼容任务自带页面

Workshop 等现有插件可在任务中提供 create_import_page(parent),返回一个内嵌 QWidget。没有显式 custom_tabs 时,宿主用这些页面替代普通任务卡片页,任务仍 保持注册并可运行。页面创建失败时保留普通任务界面。

不需要 on_main_window() 回调、修改宿主内部组件或配置应用级 custom_tabs。 应在工厂方法内导入 Qt 页面,保持任务定义可被无界面运行时导入。

在 GitHub 查看源文件 ↗ · 页面生成时间: 2026年10月23日