Skip to content

python插件开发

magicdmer edited this page Sep 6, 2022 · 4 revisions

简介

EasyGo借鉴了wox的插件架构,尤其是python插件,几乎差不多,所以如果你开发过wox的python插件,那么可以很容易的将它移植到EasyGo上面来。一个python插件是由三部分组成,py源文件,plugin.json配置文件和应用图片。

架构

插件的整体架构如图,python插件由于InitPlugin没有实际作用,废弃

image

插件接口介绍

python的插件接口相对于c++要简单许多,因为针对python插件开发封装了一个python插件类供python插件继承使用 下面是一个简单的python插件示例,插件示例需要是utf8格式

import uuid
import clipboard
# PythonPlugin是python插件的封装类,文件位于JsonRPC下面
from PythonPlugin import PythonPlugin 

class Main(PythonPlugin):
   
    # 查询函数,使用EasyGo传入的查询关键字来获取结果列表并返回,返回值是数组
    # [in] param:用户输入查询参数,字符串类型
    def Query(self, param):
        # results为结果数组
        results = []
        results.append({
            "Title": "Demo",                                #这是EasyGo上行文字
            "ShowType": 0,                                #这个是显示方式,默认是0,如果设置为1,则会读取SubTitle的文本显示在文本框,适合大量文字显示
            "SubTitle": "this is a Demo",            #这是EasyGo的下行文字
            "IconPath": "img/app.png",              #这是结果图标,可以为空,则用插件默认图标
            "Action": {                                          # 用户选中某个结果回车或者鼠标左击操作响应的函数设置
                'FuncName': 'copy_to_clip',           # 函数名,如果是自定义函数需要在类中定义,见下面
                'Parameter': param,                        # 函数参数, 函数只有一个参数,字符串类型,而且无返回值
                'HideWindow': True               # 在响应用户操作后是否隐藏窗口,可省略,默认为True
            }
        })

        return results

    @staticmethod
    def copy_to_clip(self, text):
        clipboard.copy(text)

if __name__ == '__main__':
    Main()

EasyGo提供给插件的接口

EasyGo 为插件提供了一些现有的回调接口,它们的调用方法和上述的Action结构一样,将下面的函数名传入FuncName,然后传入Parameter参数即可使用

Ra_CopyPath : 会拷贝Parameter文字内容到剪切板

Ra_Copy:这个会拷贝Parameter指定的文件到剪切板,你可以在桌面上进行粘贴文件操作

Ra_CopyImage:拷贝图片到剪切板,可以进行图片粘贴操作

Ra_ChangeQuery:会设置EasyGo输入框的值为Parameter字符串,如果和之前输入框的文字不同会触发一次查询操作

Ra_Delete:删除Paramter参数指定的文件或者文件夹 (不可恢复,非移动到回收站,请注意)

Ra_Recycle:删除Paramter参数指定的文件或者文件夹到回收站

Ra_Open:打开Parameter指定的可执行程序或者文件夹

Ra_OpenFileFolder:打开Parameter指定文件路径所在的文件夹

Ra_OpenWeb:打开Parameter指定的网址

Ra_ShowMsg: 会弹出消息提示框,非阻塞

Ra_ShowTip: 会在系统右下角弹出提示框

Ra_ShowContent : 会弹出一个文本浏览框显示你传入的Parameter内容,纯文本,只读

Ra_EditFile: 会弹出一个文本框,显示你传入的Parameter路径文件的内容,纯文本,支持编辑

还有一种接口主要提供给python插件在自定义回调接口中使用,不能使用在InitPlugin,Query和GetContextMenu里面,使用这些接口需要

from PythonPlugin import PythonPluginAPI

目前提供的接口如下

PythonPluginAPI.ChangeQuery(query) : 修改输入框的查询字符串,query为字符串类型,如果文本发生改变会触发重新查询

PythonPluginAPI.Reload() : 重载EasyGo

PythonPluginAPI.ReQuery() : 强制重新查询,而不管输入框的文本是否发生变化

PythonPluginAPI.ShowMsg(title,msg) : 让EasyGo弹出消息框,title是标题,msg是消息内容

PythonPluginAPI.ShowTip(title,msg) : 让EasyGo托盘弹出消息框,title是标题,msg是消息内容

PythonPluginAPI.ShowContent(title,msg) : 让EasyGo弹出文本阅读框,msg为文本内容

PythonPluginAPI.EditFile(title,filepath) : 让EasyGo弹出文本编辑框,编辑文件内容,filepath是文件完整路径

配置文件

{
  "ID":"98451A7B5C764F6A9A3814EF7E4AFEEC",        这个是guid唯一标示
  "Keyword":"guid",                 这个是插件关键字,用户使用该默认关键字出发插件功能
  "Name":"生成Guid",              插件名
  "Description":"生成Guid",           插件描述
  "Author":"zsxeee",                 插件作者
  "Version":"1.0.0",                   插件版本
  "PluginType":"python",            插件类型,目前有c++,python和e三种
  "PluginMode":"EnterMode",        插件模式,EnterMode或者RealMode,此字段可以省略,默认为RealMode
  "AcceptType": "png,ico,folder",    插件支持的拖入的文件类型,就是文件的后缀名,其中唯一特殊的是folder,代表插件可以接受文件夹路径参数, 可忽略
  "IconPath": "img\\app.png",        插件图标
  "ExeName":"Main.py",                插件源文件名字
  "CfgPath": "set.json"     插件的配置选项,使用相对路径,指定json配置文件路径。可以在插件管理界面右键设置,可忽略
}

插件CfgPath配置文件

配置文件json,配置项均为文本格式,而且不支持多级,类似map结构

{
    "name": "admin",
    "password": "admin",
    "role": "admin"
}

插件打包

插件打包后的格式是 插件名.Plugin ,其实就是将插件的三个文件打包成zip文件,然后把zip后缀改成Plugin即可,记住了,打包的时候插件的外层不要有文件夹 然后如果你的插件需要依赖一些Python库,那么请放入requirements.txt,一个完成的包如图:

image

其中requrements.txt里面,每个包名占一行,包不建议加上版本号,另外如果你不依赖其他库不要加入 requrements.txt 不然影响安装速度

如果你有说明文件,那么请加入 readme.txt 文件,全小写,然后加入帮助内容,用户在插件管理页面可以通过右键详情打开帮助文档,然后你也可以放入手动配置文件,在plugin.json指定(见上),然后用户可以在插件管理页面通过右键设置打开配置文件进行配置

具体的使用方法请参考示例