导入插件(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 页面,保持任务定义可被无界面运行时导入。