Anki开发入门:5分钟打造第一个插件
Anki是用Python写的,插件也是用Python开发的。下面从零开始创建一个最简单的 Hello World插件。
一、环境准备
1.1 安装Anki
下载并安装最新版Anki:官网下载地址
1.2 准备代码编辑器
就是写代码的地方,推荐 VS Code 或 PyCharm。
1.3 找到Anki插件目录
在Anki菜单中点击工具 > 插件 > 查看文件
,可打开插件目录:
C:\Users\用户名\AppData\Roaming\Anki2\addons
二、创建插件文件夹
2.1. 新建插件文件夹
在插件目录(addons
)中创建一个新文件夹,命名为 hello_world_addon
。
2.2 创建插件文件
在 hello_world_addon
文件夹中新建两个文件:
__init__.py
:插件主代码文件。文件命名必须为__init__.py
(注意是双下划线)。meta.json
:插件元数据文件
三、编写代码
3.1 meta.json
文件
此文件用于声明插件名称、版本、兼容性等信息。
{
"name": "Hello World Addon",
"package": "hello_world_addon",
"author": "Your Name",
"version": "1.0",
"homepage": "https://your-website.com",
"conflicts": [],
"target": "anki-21.0+"
}
3.2 __init__.py
文件
3.2.1 代码
代码分为 模块导入、功能定义、界面交互 三部分。
# 导入Anki核心模块
from aqt import mw
from aqt.utils import showInfo
from aqt.qt import QAction
# 定义插件的功能函数
def show_hello_world():
showInfo("Hello World! 这是你的第一个Anki插件!")
# 创建菜单项并绑定功能
action = QAction("Hello World", mw) # 创建菜单项
action.triggered.connect(show_hello_world) # 绑定点击事件
mw.form.menuTools.addAction(action) # 添加到菜单栏
3.2.1 代码解释
(1)模块导入
模块/类 | 作用 |
---|---|
aqt | Anki 的 QT 界面框架(Anki QT Toolkit),用于操作界面元素 |
mw | 主窗口对象(Main Window),代表 Anki 的整个界面 |
showInfo | Anki 内置函数,用于弹出信息提示框 |
aqt.qt.QAction | QT 框架中的动作类,用于创建菜单项、按钮等可交互元素 |
(2)功能定义
showInfo
弹窗显示消息,参数为显示消息内容。
(3)界面交互
-
action = QAction("Hello World", mw)
:创建菜单项- 功能:创建一个名为 “Hello World” 的菜单项,父对象为 Anki 主窗口 (
mw
)。 - 参数:
- 第1个参数:菜单项显示文本。
- 第2个参数:父窗口对象,确保菜单项生命周期由 Anki 管理。
- 功能:创建一个名为 “Hello World” 的菜单项,父对象为 Anki 主窗口 (
-
action.triggered.connect(show_hello_world)
:连接函数- 功能:将菜单项的 触发信号(
triggered
)连接到自定义函数show_hello_world
,即点击菜单,执行函数。 - 信号机制:QT 框架通过信号(Signal)和槽(Slot)实现事件驱动,此处点击菜单会触发
show_hello_world
执行。
- 功能:将菜单项的 触发信号(
-
mw.form.menuTools.addAction(action)
:定义位置- 功能:将菜单项添加到 Anki 主窗口的 Tools(工具)菜单 中。
- 路径依赖:
mw.form
是 Anki 主窗口的 UI 组件容器。menuTools
对应顶部菜单栏的 “Tools” 菜单。addAction
是 QT 方法,用于添加菜单项。
四、安装并测试插件
-
重启Anki
• 关闭并重新打开Anki,使插件生效。 -
验证插件是否加载
• 打开Anki,点击菜单栏的 Tools(工具),如果看到新增的 Hello World 按钮,则插件加载成功。 -
测试功能
• 点击 Tools > Hello World,应弹出提示框显示预设信息。
五、调试与排错
按 Ctrl+Shift+;
打开Anki控制台,可查看Python错误信息,例如:
SyntaxError: invalid syntax
六、扩展功能
6.1 添加多个菜单项
# 新增第二个按钮
action2 = QAction("另一个功能", mw)
action2.triggered.connect(lambda: showInfo("这是第二个功能!"))
mw.form.menuTools.addAction(action2)
6.2 修改菜单项位置
若想将菜单项添加到其他菜单(如 “Edit” 菜单),可修改代码:
mw.form.menuEdit.addAction(action) # 添加到 "Edit" 菜单
6.3 自定义快捷键
为菜单项绑定快捷键,可将下面的代码添加到创建 action 的代码后。
action.setShortcut("Ctrl+H") # 绑定快捷键 Ctrl+H
七、后续学习
- 学习PyQt5界面开发:添加配置窗口、输入框、按钮等组件。
- 操作Anki卡片数据:尝试读取/修改当前选中的卡片内容。
- 参考官方文档:Anki插件开发文档