用 Python + PyQt5 做了一个 AI 智能截图解答工具:从选区截图到多模态自动解题的完整实现
最近我折腾了一个特别实用的小工具:一个 AI 智能截图解答应用。它可以随时在屏幕上框选任意区域,自动识别截图里的内容(包括数学题、截图里的文字、甚至接口报错日志),然后直接给出 AI 解答或解释。整个工具是基于 Python + PyQt5 + OpenAI 多模态 API 开发的,目前已经能满足日常学习、工作中的快速截图+解答需求。

大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。
图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG
我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。
展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!
文章目录
前言
最近我折腾了一个特别实用的小工具:一个 AI 智能截图解答应用。
它可以随时在屏幕上框选任意区域,自动识别截图里的内容(包括数学题、截图里的文字、甚至接口报错日志),然后直接给出 AI 解答或解释。整个工具是基于 Python + PyQt5 + OpenAI 多模态 API 开发的,目前已经能满足日常学习、工作中的快速截图+解答需求。
文章里我会把完整的实现思路拆开讲清楚,顺便放一个能直接运行的 Demo 代码模块,你想二次开发成自己的小应用也完全没问题。
这个小工具能做什么?
我先简单说说它的功能,避免大家误会这只是一个“带界面的 ChatGPT”。
这个应用的特点其实非常硬核:
1. 任意区域截图
像 QQ 截图一样,按快捷键后拖个框就能截图,不用切换窗口,不用复制到剪贴板。
2. 多模态识别 + 自动答题
把截图丢到模型里,模型会自动识别文字、公式、图形,再给出解答。
可以轻松应对:
- 数学选择题、填空题
- 英语阅读理解
- 截图里的报错日志
- UI 图设计稿解释
- 表格、代码截图
- 论文截图里的公式
3. Markdown 渲染 + 数学公式渲染
不再是生硬的一段纯文本,而是完全可以展示:
- 标题
- 代码块
- 数学公式(LaTeX)
- 列表、引用等结构化内容
4. 简单易用的 GUI
基于 PyQt5 做了一个很轻量的界面:
- 输入 API Key
- 选择模型
- 自定义提示词
- 点击截图
- 自动返回渲染后的答案
你甚至可以把它打包成 exe,发给同事、同学、家人都能用。
实际使用场景举几个例子
场景 1:学生党 —— 一键截图数学题自动解答
比如你做题做到某道解析看不懂,直接一个截图,AI 自动识别题目并给出详细步骤,非常爽。
场景 2:程序员 —— 截报错日志让 AI 帮你定位问题
你写项目总会遇到那种密密麻麻的 stack trace,复制粘贴又麻烦。
截一下:
TypeError: object NoneType can't be used in 'await' expression
AI 就会告诉你:
- 出错的原因
- 哪一行触发
- 可能的修复方式
你甚至能加自定义 prompt:
解释得更口语化一点
用我的代码风格回答
给 3 种修复方案,不要废话
场景 3:运营/设计 —— 看不懂 UI 素材的内容
直接截图 → AI 自动解说界面布局。
场景 4:阅读英文说明书
看到一段英文标注、英语图片,懒得敲字就截图,让 AI 翻译并总结。
总之,场景有很多,你肯定能找到属于自己的用法。
给你一个可跑的最小 Demo:截图 + 模型识别 + 显示结果
下面的代码就是一个简化版 Demo,可直接运行,它包含:
- PyQt GUI
- 截图选区
- 多模态 API 调用
- 显示结果
你可以先跑通,再往上叠加自己的 UI 和功能。
Demo 代码
运行前需要安装依赖:
pip install PyQt5 Pillow openai
main.py
import sys
from PyQt5.QtWidgets import (
QApplication, QWidget, QPushButton,
QVBoxLayout, QTextBrowser, QLabel
)
from PyQt5.QtGui import QPixmap, QGuiApplication
from PyQt5.QtCore import Qt, QRect
from openai import OpenAI
import base64
class ScreenCapture(QWidget):
"""一个简单的截图区域选择工具"""
def __init__(self):
super().__init__()
self.begin = None
self.end = None
self.setWindowOpacity(0.3)
self.setWindowState(Qt.WindowFullScreen)
self.setWindowFlag(Qt.FramelessWindowHint)
def paintEvent(self, event):
from PyQt5.QtGui import QPainter, QPen
qp = QPainter(self)
qp.setPen(QPen(Qt.red, 2))
qp.drawRect(QRect(self.begin, self.end))
def mousePressEvent(self, event):
self.begin = event.pos()
self.end = self.begin
self.update()
def mouseMoveEvent(self, event):
self.end = event.pos()
self.update()
def mouseReleaseEvent(self, event):
self.close()
def get_rect(self):
return QRect(self.begin, self.end).normalized()
class App(QWidget):
def __init__(self):
super().__init__()
self.client = OpenAI(api_key="你的API Key")
self.setWindowTitle("AI 截图解答 Demo")
self.resize(600, 500)
layout = QVBoxLayout()
self.btn = QPushButton("截图并解答")
self.btn.clicked.connect(self.capture_screen)
self.result = QTextBrowser()
self.result.setPlaceholderText("截图后的结果会显示在这里…")
layout.addWidget(self.btn)
layout.addWidget(self.result)
self.setLayout(layout)
def capture_screen(self):
# 启动截图工具
cap = ScreenCapture()
cap.show()
cap.exec_() if hasattr(cap, "exec_") else None # 兼容性调用
rect = cap.get_rect()
screenshot = QGuiApplication.primaryScreen().grabWindow(0)
cropped = screenshot.copy(rect)
# 保存临时文件
save_path = "temp.png"
cropped.save(save_path)
# 调用多模态模型
with open(save_path, "rb") as f:
img_data = base64.b64encode(f.read()).decode("utf-8")
response = self.client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "请识别图片内容并进行解释或解答"},
{"role": "user", "content": [
{"type": "input_image", "image_base64": img_data}
]}
]
)
answer = response.choices[0].message["content"]
self.result.setMarkdown(answer)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec_())
代码解析(重点讲一下关键部分)
1. 截图选区的实现
核心用的是 PyQt 的全屏透明窗体:
self.setWindowOpacity(0.3)
self.setWindowState(Qt.WindowFullScreen)
self.setWindowFlag(Qt.FramelessWindowHint)
鼠标拖拽过程动态绘制矩形:
qp.drawRect(QRect(self.begin, self.end))
这是和 QQ 截图基本一致的思路,简单干净。
2. 截图抓取并裁剪
PyQt 有现成的接口:
screenshot = QGuiApplication.primaryScreen().grabWindow(0)
cropped = screenshot.copy(rect)
这样你能拿到用户框选区域的确切像素内容。
3. 多模态 API 调用
使用 OpenAI API 时需要注意:
多模态输入格式为:
{"type": "input_image", "image_base64": img_data}
模型可以自由换成:
gpt-4ogpt-4o-miniqwen-vl-plusglm-4v- 兼容 OpenAI 格式的任何第三方推理
完全可以让用户自己在 GUI 里配置。
4. Markdown 输出 + 数学公式
QTextBrowser 原生支持 Markdown,渲染体验不错。
你想加 LaTeX 数学公式的话,可以加上:
- MathJax(嵌入 WebEngineView)
- Katex
- PyMarkdown + MathRender
打造一个“AI 题解助手”完全不是梦。
实际运行效果会怎样?
用户点击“截图并解答” → 选框 → 等几秒 → 页面自动渲染答案。
比如你截一段数学题,展示:
已知函数 f(x)=x²+1,求 f(3)
模型回答会变成:
### 解题步骤
1. 将 x = 3 代入函数
2. f(3) = 3² + 1 = 9 + 1 = 10
**最终答案:10**
非常清爽。
你可以把这个 Demo 升级成什么?
下面是一些扩展功能,我自己做过或正在准备做的:
热键触发截图(不打开窗口)
比如按下 Ctrl+Shift+A 就能截图。
任务栏常驻图标
双击图标即可截图。
自定义 Prompt 面板
比如:
- 解题请用步骤 + 公式
- 遇到英文请翻译
- 对代码截图自动输出修复建议
使用本地模型
比如:
- llava
- minicpm-v
- qwen2-vl
支持 OpenAI 函数格式即可替换。
输出到剪贴板
方便你粘贴到 Word、微信、Notion。
总结
这个 Python + PyQt5 的 AI 截图解答工具,虽然是一个小项目,但它结合了多模态模型、截图交互、Markdown 渲染等功能,真正能提高效率。
你完全可以把它变成:
- AI 数学作业助手
- AI 网页内容总结工具
- AI 报错诊断助手
- AI 论文 PDF 截图解析助手
- AI 代码截图解释工具
更多推荐



所有评论(0)