Anki插件开发必知必会:钩子函数与右键菜单定制
为啥要自定义右键菜单——场景共鸣 钩子函数到底是个啥——生活化比喻 菜单定义的核心代码骨架 实战给浏览器卡片右键加上“查词典” 必知必看的注意事项与奇技淫巧 第一部分那个让人抓狂的下午起因的话开头已经说过了还有个需求就是在复习英语卡片时遇到个生僻词想查在线词典。正常操作是选中文本 → 右键复制 → 切到浏览器 → 粘贴搜索 → 再切回来。重复几次耐心直接清零了关键是费时呀当时我就想如果能在Anki里右键直接调接口查词还能顺手把释义填进字段该多爽。前几天咱们写的 FastAPI 自定义本地词典是不是也可以发光发热其实Anki插件体系还是很灵活的关键是把“什么时候触发”和“触发后干什么”串起来。前者靠钩子后者靠你写的函数而右键菜单或顶部菜单只是触发方式之一。 第二部分核心原理——钩子就是厨房里的传菜铃别被“钩子”这词吓到。把它想象成餐厅后厨的传菜铃厨师Anki做完一道工序就“叮”地按一下铃触发钩子服务员你的插件听到后去上菜执行自定义代码。其实就是这么简单Anki内置了一堆钩子点比如 卡片浏览器加载完菜单时browser.setupMenus 复习界面显示问题前reviewer.didShowQuestion 卡片添加、删除、修改时……我们定义右键菜单其实就是告诉Anki“嗨在浏览器右键菜单那个钩子触发时帮我塞进去一个‘查词典’选项。”这背后对应的钩子叫 browser.setupMenus官方文档虽然列出了但新手容易忽略的是你必须在这个钩子回调里去调用菜单对象的 addAction否则菜单项死活不会出现。还有一个大坑提醒老版本Anki的钩子命名不太一样比如 setupEditorButtons 和 browser.setupMenus 容易搞混。如果你用的 Anki 版本 2.1.55认准 browser.setupMenus 就行。版本太低的话赶紧升吧好多好用的钩子都没有。再说一点就是Anki就算升级到了新版本还是要注意下它里面的有些属性和函数因为版本差异就是死活找不到这时候你只能去源码里“移至定义”慢慢找了结合出错信息提示会快一些⚙️ 第三部分实战演示——三步给菜单加“查词典”功能好咱们直接上代码骨架。假设你已经在插件文件夹里新建了init.py。第一步导入必要的模块from aqt import mwfrom aqt.browser import Browserfrom aqt.qt import QActionfrom anki.hooks import addHookimport webbrowser这里 mw 是主窗口对象各种全局资源都通过它访问。第二步定义菜单添加函数并绑定钩子def setup_context_menu(browser: Browser):# 创建一个QAction这就是菜单项 action QAction( 一键查词典, browser) # 当用户点击时执行查询函数 action.triggered.connect(lambda: lookup_word(browser)) # 把action塞进浏览器菜单项里 browser.form.menuEdit.addAction(action)addHook(“browser.setupMenus”, setup_context_menu)注意啊browser.form.menuEdit 是浏览器顶栏“编辑”菜单的对象。如果你想加到其他菜单项下要看下源码里的命名不然会报错找不到对象。如果要添加到右键菜单项中我在卡片浏览器源码里没找到相应钩子不过我需要的是在笔记编辑界面中添加右键菜单项这个钩子函数我找到了就最下面代码里的editor_will_show_context_menu使用方式上和上面有点不同但意思大差不差gui_hooks.editor_will_show_context_menu.append(setup_editor_context_menu)第三步实现查词函数def lookup_word(browser: Browser):# 获取浏览器当前选中的文本 selected browser.current_card if not selected: return # 这里只是示例实际可从卡片字段取词 word selected.note()[Front] webbrowser.open(fhttps://dict.youdao.com/search?q{word})这个例子是直接用电脑默认浏览器来查词典。你完全可以结合 FastAPI 接口把查询结果写回卡片字段比如调个API后修改 note()[“Back”] 再 note().flush()。你可能会问“那我怎么知道有啥钩子能用”最好的办法不是死记硬背因为它可能因为版本不同就变了而是去Anki源码里搜 runHook 或 addHook 等关键词看它本身是怎么调用的或者在插件开发文档里找 Hooks Reference。另外用 aqt.utils.showInfo 打日志是最朴素的调试法插件控制台不弹错误时全靠它保命。 第四部分注意事项与进阶思考 千万别在主线程里干重活像调API、大量IO操作记得用 mw.taskman.run_in_background 包起来否则Anki直接卡死给你看。 菜单对象生命周期不要在钩子外面预先创建 QAction 然后反复添加每次 setupMenus 触发时都可能重建菜单你只管每次新建并加入系统会管理销毁否则容易出重复菜单项。 多版本兼容如果你想让插件同时兼容新旧Anki可以加个 if hasattr(Browser, ‘form’) 之类的判断但不如直接声明最低版本要求省心。再说个容易翻车的点修改了代码后记得重启Anki网上说的什么“开发者模式”下的“重载插件”功能我找了半天我这个版本里也没有找到还是重启来的干脆还省了缓存干扰。 来个小结其实自定义Anki插件就是个搭积木的过程——钩子告诉你“哪里能插”菜单定义告诉它“长什么样”你的函数决定“插进去干什么”。

相关新闻

LLM 写对联:格式对了不代表文化对了

LLM 写对联:格式对了不代表文化对了

LLM 写对联:格式对了不代表文化对了 一、大模型写对联格式完美但意境缺失,文化理解不是模式匹配 对联是中华文化里最精炼的文字艺术形式:上下联字数相等、平仄相对、词性对应、意境呼应。大模型写对联时,格式层面可以做得很好——…

2026/7/11 20:00:31阅读更多 →
汇编——数据存储模式

汇编——数据存储模式

基础概述 1.存储模式:规定多字节数值在连续内存字节单元里的排布顺序(大端 / 小端) 2.内存最小单元:1 地址 1 字节 (8bit),地址是字节的编号 3.32 位进程虚拟地址空间总大小 4GB,地址范围十六进制&#xf…

2026/7/11 20:00:31阅读更多 →
现代Web文件传输架构深度解析:从技术挑战到企业级解决方案

现代Web文件传输架构深度解析:从技术挑战到企业级解决方案

现代Web文件传输架构深度解析:从技术挑战到企业级解决方案 【免费下载链接】webuploader Its a new file uploader solution! 项目地址: https://gitcode.com/gh_mirrors/we/webuploader 在当今数据驱动的Web应用中,高效可靠的文件传输已成为系统…

2026/7/11 20:00:31阅读更多 →
DNS 服务器配置实战:3分钟完成 Windows 11/Ubuntu 22.04 双系统切换

DNS 服务器配置实战:3分钟完成 Windows 11/Ubuntu 22.04 双系统切换

DNS 服务器配置实战:3分钟完成 Windows 11/Ubuntu 22.04 双系统切换当你在 Windows 11 和 Ubuntu 22.04 双系统之间频繁切换时,是否遇到过网页加载缓慢、视频缓冲卡顿的情况?这很可能与 DNS 服务器设置有关。本文将带你深入了解 DNS 的工作原…

2026/7/11 21:06:42阅读更多 →
L9958与PIC18F57Q43电机控制方案解析

L9958与PIC18F57Q43电机控制方案解析

1. L9958与PIC18F57Q43的黄金组合解析在电机控制领域,L9958驱动芯片与PIC18F57Q43微控制器的组合堪称性能与效率的典范。L9958是STMicroelectronics推出的一款多通道电机驱动芯片,内部集成8路半桥驱动器,单芯片即可驱动多个直流电机或负载。其…

2026/7/11 21:06:42阅读更多 →
Mininet 2.3.0 Python API 实战:3步连接远程Ryu控制器(OpenFlow 1.3)

Mininet 2.3.0 Python API 实战:3步连接远程Ryu控制器(OpenFlow 1.3)

Mininet与Ryu控制器深度集成实战:Python API连接OpenFlow 1.3全解析在软件定义网络(SDN)的实践领域中,Mininet与Ryu控制器的组合堪称黄金搭档。本文将彻底突破传统命令行操作的局限,带您深入Python API层面对SDN网络进…

2026/7/11 21:06:42阅读更多 →
ONNX Runtime 性能调优:3 种 Execution Provider 配置与 CPU/GPU 推理速度实测

ONNX Runtime 性能调优:3 种 Execution Provider 配置与 CPU/GPU 推理速度实测

ONNX Runtime 生产级推理优化:三大执行提供程序深度评测与实战指南在AI模型部署的最后一公里,推理性能直接决定了用户体验与基础设施成本。ONNX Runtime作为微软开源的跨平台推理引擎,凭借其模块化架构和高度优化的执行提供程序(E…

2026/7/11 21:06:42阅读更多 →
Gazelle-cni常见问题解决:10个关键故障排除技巧与最佳实践

Gazelle-cni常见问题解决:10个关键故障排除技巧与最佳实践

Gazelle-cni常见问题解决:10个关键故障排除技巧与最佳实践 【免费下载链接】gazelle-cni 仓库关闭的原因:https://gitee.com/openeuler/community/pulls/3795 项目地址: https://gitcode.com/openeuler/gazelle-cni 前往项目官网免费下载&#xf…

2026/7/11 21:06:42阅读更多 →
STM32F413RH与AD5593R的混合信号IO开发指南

STM32F413RH与AD5593R的混合信号IO开发指南

1. AD5593R与STM32F413RH的硬件组合概述AD5593R是一款高度集成的8通道混合信号IO芯片,通过I2C接口与主控器通信。每个通道可独立配置为12位ADC输入、12位DAC输出或数字IO口。其核心特性包括:12位ADC采样率最高达500ksps(理论值)12…

2026/7/11 21:01:42阅读更多 →
从GitHub安全案例解析常见漏洞与防护实践

从GitHub安全案例解析常见漏洞与防护实践

1. 项目概述:从GitHub Trending看安全实战 最近在GitHub Trending上看到一个项目,叫 skills4/skills ,它因为一些安全漏洞案例被大家讨论。这其实是一个挺典型的场景:一个旨在展示或教授某种技能的仓库,本身却成了安…

2026/7/11 18:37:06阅读更多 →
MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

MLT 2026启示:因果推理与概率建模驱动下一代LLM应用

# MLT 2026启示:因果推理与概率建模驱动下一代LLM应用## 一、背景与挑战:从“黑箱预测”到“可信推理”2026年6月,第7届机器学习与趋势国际会议(MLT 2026)将在悉尼召开。会议议程中,“因果与可解释机器学习…

2026/7/11 15:18:12阅读更多 →
通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

通达OA SQL注入漏洞深度剖析:从手工注入到自动化利用与防御

1. 项目概述与漏洞背景最近在梳理一些历史OA系统的安全风险时,通达OA v11.6版本中的一个老漏洞又进入了我的视线。这个漏洞位于/general/bi_design/appcenter/report_bi.func.php文件中,是一个典型的SQL注入点。虽然这个漏洞的利用方式看起来并不复杂&am…

2026/7/11 15:11:32阅读更多 →
Premiere Pro 2025安装失败原因与AGSIS验证绕过指南

Premiere Pro 2025安装失败原因与AGSIS验证绕过指南

1. 为什么2025版PR安装比以往更“磨人”?——从弹窗警告到路径陷阱的真实处境 Premiere Pro 2025版不是简单的一次版本迭代,它是一道分水岭。我从去年底开始帮影视工作室、高校剪辑实验室和自由职业者部署2025环境,累计处理了137台设备&#…

2026/7/11 0:03:43阅读更多 →
5款实用macOS系统优化工具:让你的Mac运行更流畅更高效

5款实用macOS系统优化工具:让你的Mac运行更流畅更高效

5款实用macOS系统优化工具:让你的Mac运行更流畅更高效 【免费下载链接】open-source-mac-os-apps 🚀 Awesome list of open source applications for macOS. https://t.me/s/opensourcemacosapps 项目地址: https://gitcode.com/gh_mirrors/op/open-so…

2026/7/11 0:03:43阅读更多 →
5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南

5分钟完全掌握:ComfyUI ControlNet预处理器终极使用指南 【免费下载链接】comfyui_controlnet_aux ComfyUIs ControlNet Auxiliary Preprocessors 项目地址: https://gitcode.com/gh_mirrors/co/comfyui_controlnet_aux 想要让AI图像生成真正听从你的指挥吗&…

2026/7/11 0:03:43阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/11 16:20:28阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/10 22:20:33阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/11 18:12:23阅读更多 →