Python 实现的截屏工具:功能详解与部署指南
本文介绍基于 Python 和 PyQt5 开发的截屏工具 Jamscreenshot。该工具支持透视裁剪、多边形截图、取色器及油漆桶等高级编辑功能,并具备窗口控件识别能力。文章详细解析了其基于 PyQt5 信号槽机制与 OpenCV 轮廓识别的核心实现思路,并提供完整的模块安装与运行指南。
项目地址
该工具的源代码托管于 GitHub,项目地址为:https://github.com/fandesfyf/Jamscreenshot
功能概述
该截屏工具在基础截图之上,扩展了丰富的图像编辑与交互功能,旨在提升用户处理屏幕内容的效率。主要功能特性包括:
- 高级编辑工具:新增透视裁剪、多边形截图、取色器以及油漆桶填充工具。
- 背景处理:提供背景还原画笔,支持一键还原操作。
- 历史记录:支持回退 10 步的操作历史记录,增强编辑容错性。
- 交互优化:新增智能选框开关;画笔支持透明度调节(按住 Ctrl 键 + 滚轮);截屏透明度也可通过 Ctrl + 滚轮调节;鼠标划过取色按钮时显示常用颜色。
- 屏幕固定与识别:支持将多个图片固定在屏幕上;基于 OpenCV 轮廓识别技术实现窗口控件识别。
模块安装
运行该工具需要安装特定的 Python 库。请确保您的环境中已包含以下依赖:
- PyQt5:作为核心 GUI 框架,直接运行
pip install PyQt5即可安装。 - Pillow (PIL):用于图像处理,直接运行
pip install Pillow。 - OpenCV:用于窗口控件识别。普通版本
opencv-python可满足基本需求;若需使用滚动截屏功能,必须安装 contrib 版本,且版本需小于opencv-contrib-python==3.4.2.17。
此外,项目根目录下的 jamresourse.py 文件包含必要的图片资源,请勿删除。
核心实现思路
该工具代码总长 2000 余行,其核心逻辑围绕 PyQt5 的事件驱动机制与多层窗口堆叠展开。以下是其实现原理的详细解析:
1. 截屏触发与窗口构建
当用户点击截屏按钮或触发快捷键时,系统通过 PyQt5 的信号槽机制调用 screen_shot 函数。该函数利用 PyQt 的 grabWindow 方法截取全屏图像,并创建一个全屏窗口来显示截屏结果。该窗口具有以下关键属性:
- 类型为
QLabel。 - 具备置顶(Always on Top)属性,确保始终位于其他窗口之上。
- 无边框设计,提供沉浸式编辑体验。
- 开启鼠标追踪(Mouse Tracking),以精确捕捉鼠标移动轨迹。
2. 多层堆叠架构
截屏界面由三层 QLabel 堆叠而成,分别承担不同职责:
- 背景层:显示截取的全屏图像内容。
- 绘图层:具有透明背景,用于承载用户的涂鸦、裁剪框等编辑操作。该层以
Slabel作为父控件。 - 遮罩层:显示截屏阴影和选区方框,同样以
Slabel为父控件。
3. 交互逻辑与事件处理
所有的用户交互均通过 Slabel 主类中的参数(如选区对角坐标 self.x0, x1, y0, y1)进行控制。鼠标事件的处理流程如下:
- 按下(mousePressEvent):记录起始位置。
- 移动(mouseMoveEvent):实时更新鼠标位置,动态绘制选区或编辑内容。
- 松开(mouseReleaseEvent):记录结束位置,并弹出确定按钮以显示最终选区界面。
上述三个事件触发时,均会调用 update 函数。该函数会自动重绘界面,进而调用 paintEvent 函数,确保用户看到的图像与编辑操作实时同步。
运行环境
该工具在以下环境中测试通过,一切运行正常:
- Python 版本:3.7
- PyQt5 版本:5.13.2
- 操作系统:Windows 10
用户可直接运行项目文件,无需额外配置即可使用全部功能。
效果图




以上就是 Python 实现的截屏工具 Jamscreenshot 的详细内容,更多关于 Python 图像编辑与 PyQt5 开发技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









