🚀 本项目旨在为考试客户端(如学习通)提供本地题库、AI搜题、界面增强等多种实用功能。
本项目是一个专为考试客户端(如学习通)设计的辅助工具,集成了本地题库管理、AI智能搜题、窗口防护与界面增强等多项实用功能,提升考试答题效率与体验。
- 本地题库导入:自动读取
tiku.txt
文件,支持大批量题目管理。 - 关键词高亮搜索:输入关键词后,所有匹配项高亮显示,支持回车键跳转下一个结果。
- 题库内容只读保护:防止误操作修改题库内容。
- 多AI平台支持(免重启热切换):默认使用写死在代码中的讯飞星火配置;当存在
config.yaml
且配置了deepseek.api_key
时自动使用 Deepseek;在设置页保存 Deepseek 配置后可立即生效,无需重启。 - 一键AI问答:输入问题后,AI自动返回答案,支持多线程防止界面卡顿。
- AI答案一键输入:AI答案可一键自动输入到目标输入框(需英文输入法)。
- 窗口置顶与防录屏/截屏:调用
SetWindowDisplayAffinity
,窗口始终置顶且无法被录屏/截屏工具捕获。 - 窗口透明度调节:右键一键切换(0.2/0.5),Ctrl+滚轮精细调节(0.1~1.0)。
- 字体大小调节:Alt+滚轮随时调整题库/AI答案字体大小。
- 窗口快速隐藏/显示:F3一键隐藏到屏幕边缘,再次按下恢复。
- 窗口自由拖动:Ctrl+鼠标左键拖动窗口到任意位置。
- ESC/F1-F12快捷退出:ESC或任意F1-F12键可快速关闭程序(可自定义)。
- 多线程处理:AI问答、输入等操作均采用多线程,保证界面流畅不卡顿。
- 详细注释与易用配置:所有代码文件均有详细头部说明和函数注释;
config.yaml
仅存放 Deepseek 配置,简单明了,便于二次开发。
本项目已重构为模块化结构,主入口为main.py
,各功能分为独立模块,便于维护和扩展。
├── main.py # 程序主入口,负责加载配置、初始化界面、事件绑定、AI调用与主流程调度
├── config_manager.py # 配置加载与校验,提供全局配置访问接口
├── file_manager.py # 题库文件读取,供主界面加载题库内容
├── ai_spark.py # 讯飞星火AI WebSocket API调用、参数生成、消息处理
├── ai_deepseek.py # DeepseekAI HTTP API调用,AI问答请求与异常处理
├── ui_main.py # 主界面控件的创建、布局、搜索高亮、输入等事件处理
├── ui_ai.py # AI界面控件的创建、布局、AI搜索与输入事件处理
├── ui_settings.py # 设置界面(嵌入式)Deepseek 配置读写与保存
├── utils.py # 通用窗口操作工具函数,如置顶、透明度调整、窗口拖动、关闭等
├── config.yaml # 配置文件,仅包含 Deepseek 配置(可选)
├── tiku.txt # 本地题库文件
└── README.md # 项目说明文档
- 安装Python:确保已安装Python 3.7+。
- 安装依赖:在命令行中运行以下命令安装所需依赖:
pip install tkinter requests pyyaml pynput websocket-client
- 准备文件:在程序运行目录下创建
tiku.txt
(题库)和config.yaml
(配置文件)。
- 程序默认使用讯飞星火配置,无需也不会写入到
config.yaml
。 - 如需使用 Deepseek,请在主界面的“设置”中填写并保存:
api_key
: 你的 Deepseek API Keymodel
: 仅支持deepseek-chat
或deepseek-reasoner
- 保存后立即生效,无需重启;
config.yaml
仅包含deepseek
字段。
- 运行程序:在命令行中运行
python main.py
。 - 主界面功能:
- 题库搜索:输入关键词,回车跳转下一个结果。
- 设置/AI:顶部右侧“设置”按钮与“AI”按钮(已对调位置)。
- 快捷输入:在输入框中输入内容,点击"输入"按钮自动输入。
- F3:窗口隐藏/恢复
- Ctrl+鼠标左键:拖动窗口
- 右键:切换透明度
- Ctrl+滚轮:调整透明度
- Alt+滚轮:调整字体大小
- ESC/F1-F12:快速退出
- 回车:题库搜索下一个
-
Q: 启动报错"缺少config.yaml文件"?
- A: 请确保
config.yaml
在程序同目录下,参考示例配置文件填写。
- A: 请确保
-
Q: 题库无法加载或搜索?
- A: 请确保
tiku.txt
存在且为UTF-8编码,每行一题。
- A: 请确保
-
Q: AI搜题无响应?
- A: 检查网络连接、API密钥是否正确,或更换AI平台。
-
Q: 窗口无法被录屏/截屏?
- A: 仅主窗口受保护,输入法弹窗等仍可能被录屏,技术有限无法完全防护。
-
Q: 如何自定义快捷键?
- A: 可在
main.py
等文件中修改相关绑定代码,注释详细易于调整。
- A: 可在
日期 | 事件 |
---|---|
2024.12.26 | 项目开始,创建代码仓库 |
2024.12.27 | 创建README和GPL-3.0 License,demo1.py实现透明度、快捷退出等 |
2024.12.28 | 解决截屏/录屏,题库导入与高亮搜索 |
2024.12.29 | 添加一键输入功能 |
2024.12.30 | 完成AI功能(讯飞星火),项目基本完成 |
2025.1.1 | 添加Alt+滚轮调整字体大小 |
2025.1.6 | 添加窗口可移动(Ctrl+鼠标左键) |
2025.1.7 | 添加config文件,AI功能更易配置 |
2025.2.13 | 添加Deepseek AI |
2025.2.25 | 添加前置文件查找、详细注释 |
2025.2.27 | 多线程处理防止堵塞 |
2025.4.22 | 查找下一个功能 |
2025.7.9 | 终于把屎山重构了,更加便于修改 |
2025.9.10 | 更新架构 |
⚠️ 请确保运行目录下有tiku.txt
和config.yaml
文件
- AI逻辑代码已模块化,详见
ai_spark.py
、ai_deepseek.py
- 讯飞星火AI需自行申请密钥
- 预留AI可直接使用,建议更换为自己的
- 其他AI请自行修改代码
- 隐藏(F3)时窗口透明度降到最低,拉成细条放左侧
- 输入法内容仍可能被录屏/截屏,能力有限无法解决,如有方案欢迎issues留言
- 如需要破解复制粘贴功能&&篡改猴相关功能,请移步cef_cx_copy_tool
config.yaml
(可选,仅用于 Deepseek,无需单独设置):
deepseek:
api_key: "YOUR_DEEPSEEK_API_KEY"
model: "deepseek-chat" # 或 deepseek-reasoner
欢迎提交 Issues 反馈问题或建议,或直接 Fork/PR 参与开发。
本代码仅用于学习讨论,禁止用于盈利或违法用途。
- 遵循 GPL-3.0 License 协议:
- 允许开源/免费使用、引用、修改、衍生
- 禁止闭源商业发布、销售及盈利
- 基于本代码的程序必须同样遵守GPL-3.0协议
- 他人或组织使用本代码进行的任何违法行为与本人无关