惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News | PayPal Newsroom
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News: Ask HN
Hacker News: Ask HN
H
Hacker News: Front Page
Apple Machine Learning Research
Apple Machine Learning Research
TaoSecurity Blog
TaoSecurity Blog
Help Net Security
Help Net Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
人人都是产品经理
人人都是产品经理
博客园 - 三生石上(FineUI控件)
Security Latest
Security Latest
Cloudbric
Cloudbric
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Know Your Adversary
Know Your Adversary
A
Arctic Wolf
L
LangChain Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The GitHub Blog
The GitHub Blog
P
Proofpoint News Feed
W
WeLiveSecurity
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
M
MIT News - Artificial intelligence
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
小众软件
小众软件
NISL@THU
NISL@THU
云风的 BLOG
云风的 BLOG
P
Privacy & Cybersecurity Law Blog
S
Security @ Cisco Blogs
博客园 - 【当耐特】
I
InfoQ
Vercel News
Vercel News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Proofpoint News Feed
O
OpenAI News
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
K
Kaspersky official blog
T
Threat Research - Cisco Blogs
量子位
宝玉的分享
宝玉的分享

智朋的个人博客

Anki 笔记读取器 使用 PyQt 制作简易软件简明笔记 LaTeX 图片背景 eso-pic 宏包 残余应力 文件树目录 Excel 操作指南 Word 操作指南 Mermaid 甘特图 QHUMaster 使用指南 QHUMaster 使用指南
制作 Anki 插件简明笔记
coffeelize · 2024-08-17 · via 智朋的个人博客

插件想法

想法来自于 Anki 插件:ankiweb.net/shared/info/1915225457,没想到 Anki 程序内部还能内嵌浏览器,不可思议

换在从前,想想自己那么菜的技术也就过了,可是目前有了 GPT 的加持,事情就变得不可思议了。当然,想要开发一款体验性能都好的插件,一个可称之为 项目 的插件,GPT 目前还是不太行的,下面为使用 GPT 辅助开发的两个简单 Anki 插件

插件目录

打开 Anki,快捷键 Ctrl+Shift+A 可弹出插件管理器,点击 查看文件 可以跳转到 Anki 插件的安装目录

image.png

例如我的 Anki 插件文件路径为:C:\Users\Administrator\AppData\Roaming\Anki2\addons21

创建插件

新建文件夹,例如 BrowserPlugin,在文件夹中新建 __init__.py 文件,之后在该 python 文件中编辑代码即可。

PS:每次修改代码之后,需重启 Anki 以重新加载插件,插件为自动加载方式

ANKI 插件的完整生成过程可参考与 GPT 的对话:ChatGPT - 开发 Anki 插件.

我只负责引导和给出调试报错信息,代码全程由 GPT 负责生成,代码如下:

image.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from aqt import mw
from aqt.qt import QAction, QMenu
from PyQt6.QtCore import Qt
import webbrowser

def onGoogleSearch():

selected_text = mw.web.selectedText()

if selected_text:

webbrowser.open(f"https://www.google.com/search?q={selected_text}")

def showContextMenu(point):
menu = QMenu()

selected_text = mw.web.selectedText()

if selected_text:
action = QAction("Google搜索", mw)
action.triggered.connect(onGoogleSearch)
menu.addAction(action)

menu.exec(mw.web.mapToGlobal(point))

def setup_menu():
mw.web.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
mw.web.customContextMenuRequested.connect(showContextMenu)

setup_menu()

重启 Anki 之后(插件会自动加载),选中文字右键,即可弹出 Google 搜索菜单项,点击即可使用外部浏览器对选中的文字进行搜索,效果如下:

image.png

进一步完善插件

如上所述,搜索时使用外部浏览器进行搜索,能否在 Anki 程序中内嵌浏览器呢 —> 接下来还是通过 GPT 的辅助,完成初步的想法,完整示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from aqt import mw
from aqt.qt import *
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtCore import QUrl, Qt

class BrowserDockWidget(QDockWidget):
def __init__(self, parent=None):
super().__init__("内置浏览器", parent)
self.browser = QWebEngineView()
self.setWidget(self.browser)
self.setup_browser_settings()
self.browser.setUrl(QUrl("https://www.google.com"))

def setup_browser_settings(self):

settings = self.browser.settings()
settings.setAttribute(QWebEngineSettings.WebAttribute.JavascriptEnabled, True)
settings.setAttribute(QWebEngineSettings.WebAttribute.PluginsEnabled, True)
settings.setAttribute(QWebEngineSettings.WebAttribute.LocalStorageEnabled, True)
settings.setAttribute(QWebEngineSettings.WebAttribute.DnsPrefetchEnabled, True)
settings.setAttribute(QWebEngineSettings.WebAttribute.AutoLoadImages, True)

def search(self, query):
self.browser.setUrl(QUrl(f"https://www.google.com/search?q={query}"))

def show_browser_dock_widget():
if not hasattr(mw, 'browser_dock'):
mw.browser_dock = BrowserDockWidget(mw)
mw.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, mw.browser_dock)
mw.browser_dock.show()

def on_search_google():
selected_text = mw.web.selectedText()
if selected_text:
show_browser_dock_widget()
mw.browser_dock.search(selected_text)

def context_menu_event(point):
menu = QMenu(mw)
menu.addAction("Google搜索", on_search_google)
menu.exec(mw.web.mapToGlobal(point))

def add_search_context_menu():
mw.web.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
mw.web.customContextMenuRequested.connect(context_menu_event)


add_search_context_menu()

浏览器右上角的几个按钮可以对内置浏览器进行关闭,拖动还可以自定义浏览器在 Anki 程序中的位置,展示效果如下:

image.png

Anki.gif