匯入外掛(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日