当前位置: 首页 > news >正文

python(47) : 快速截图[Windows工具(2)]

1.说明

这是一个基于 PyQt5 的快捷截图工具,支持全局热键快速截图。

✨ 主要特点

  • 🎯 全局热键:Ctrl + Shift + X 随时启动截图

  • 🖼️ 可视化选区:亮青色边框,清晰标识截图区域

  • 📁 自动编号:截图自动按顺序命名(1.png, 2.png...)

  • 💾 本地保存:所有截图保存在 screenshots 文件夹

🎨 视觉效果

  • 边框颜色:亮青色(非常醒目)

  • 边框宽度:4像素实线

  • 背景遮罩:30%透明度黑色遮罩

🚀 使用方法

  1. 启动程序:运行 python 快速截图.py

  2. 开始截图:按 Ctrl + Shift + X

  3. 框选区域:鼠标拖拽选择截图区域

  4. 自动保存:松开鼠标,截图自动保存

  5. 退出程序:按 Esc

📦 依赖库

pip install mss PyQt5 keyboard

📂 保存位置

截图保存在:screenshots/ 文件夹(自动创建)

⚙️ 自定义配置

可以在代码顶部修改配置:

  • BORDER_COLOR:边框颜色

  • BORDER_WIDTH:边框宽度

  • SELECTION_OPACITY:遮罩透明度

  • SAVE_DIR:保存目录

2.代码

import mss
import sys
import os
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtCore import Qt, QRect, QPoint
from PyQt5.QtGui import QCursor, QPainter, QPen, QBrush,QColor
import keyboard# ================== 配置区 ==================
SAVE_DIR = "screenshots"
os.makedirs(SAVE_DIR, exist_ok=True)# 计数器文件
counter_file = os.path.join(SAVE_DIR, "counter.txt")# ✅ 自定义样式
#BORDER_COLOR = Qt.blue  # 边框颜色(可改为 Qt.green, Qt.blue, Qt.yellow 等)
# 或者使用自定义颜色:QColor(0, 255, 255) 青色
BORDER_COLOR = QColor(0, 255, 255)  # 亮青色,非常醒目
BORDER_WIDTH = 4  # 线宽(增加到4像素)
SELECTION_OPACITY = 0.3  # 选中区域外部的遮罩透明度 (0.0~1.0),稍微提高对比度# ==========================================def get_next_counter():if os.path.exists(counter_file):try:with open(counter_file, "r") as f:return int(f.read().strip()) + 1except:passreturn 1def save_counter(counter):with open(counter_file, "w") as f:f.write(str(counter))counter = get_next_counter()class CaptureWindow(QWidget):def __init__(self):super().__init__()# 全屏无边框窗口,置顶self.setWindowFlags(Qt.Window | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)self.setGeometry(QApplication.desktop().availableGeometry())# 设置遮罩背景(半透明)self.setStyleSheet(f"background-color: black;")self.setWindowOpacity(SELECTION_OPACITY)self.begin = QPoint()self.end = QPoint()def paintEvent(self, event):if self.begin == self.end:returnpainter = QPainter(self)# 设置边框pen = QPen(BORDER_COLOR)pen.setWidth(BORDER_WIDTH)pen.setStyle(Qt.SolidLine)  # 实线效果(更清晰)painter.setPen(pen)# 去除填充,只画边框painter.setBrush(QBrush(Qt.NoBrush))# 绘制矩形rect = QRect(self.begin, self.end)painter.drawRect(rect)def mousePressEvent(self, event):self.begin = event.pos()self.end = event.pos()self.update()def mouseMoveEvent(self, event):self.end = event.pos()self.update()def mouseReleaseEvent(self, event):global counterself.end = event.pos()self.close()  # 关闭选择窗口# 获取矩形坐标x1 = min(self.begin.x(), self.end.x())y1 = min(self.begin.y(), self.end.y())x2 = max(self.begin.x(), self.end.x())y2 = max(self.begin.y(), self.end.y())width = x2 - x1height = y2 - y1if width < 5 or height < 5:  # 防止误触return# 使用 mss 截图with mss.mss() as sct:monitor = {"top": y1,"left": x1,"width": width,"height": height}img = sct.grab(monitor)filename = os.path.join(SAVE_DIR, f"{counter}.png")mss.tools.to_png(img.rgb, img.size, output=filename)print(f"✅ 截图已保存: {filename}")# 更新计数器save_counter(counter)counter += 1def start_capture():app = QApplication.instance() or QApplication(sys.argv)window = CaptureWindow()window.show()app.exec_()# 注册快捷键
keyboard.add_hotkey('ctrl+shift+x', start_capture)print("📸 截图工具已启动!")
print(f"   🔑 快捷键:Ctrl + Shift + X 开始截图")
print(f"   📁 保存路径:{os.path.abspath(SAVE_DIR)}")
print(f"   🚪 按 Esc 退出程序")# 保持运行,直到按下 Esc
keyboard.wait('esc')
print("🔚 程序已退出")

http://www.dtcms.com/a/469645.html

相关文章:

  • VSCODE GDB调试
  • 江西企业网站定制wordpress网页效果
  • CCF-GESP 等级考试 2024年6月认证C++三级真题解析
  • 前端学习1(学习时间:30分钟简单)
  • vlan范围
  • 北京顺义做网站编程正规学校有哪几所
  • 跨平台向量库:Linux Windows 上一条龙部署 PostgreSQL 向量扩展
  • 基于YOLO与DeepSort的高效行人跟踪算法研究
  • [GazeTracking] 视线追踪核心逻辑 | Dlib库
  • docker安装Xinference
  • 从标准化到个性化:基于代理模式的智能办公工具技术实现与趋势
  • AI(学习笔记第十一课) 使用langchain的multimodality
  • 如何配置iis网站国企500强完整名单
  • ppt做的最好的网站有哪些品牌建设方案和思路
  • [cpprestsdk] http_client_config | GET | request()
  • HQChart使用教程30-K线图如何对接第3方数据46-DRAWTEXT_FIX数据结构
  • 奥特蛋的做网站门户网站的发布特点
  • Unity网络开发--超文本传输协议Http(2)
  • Java后端开发核心技术选型指南(优化版)
  • 数字图像处理-图像的傅里叶变换
  • 分布式缓存架构:从原理到生产实践
  • 现代计算机视觉任务综合概述:定义、方法与应用
  • ai 作物分类
  • sm2025 模拟赛11 (2025.10.7)
  • WebSocket 是什么原理?为什么可以实现持久连接?
  • 【开题答辩全过程】以 宝成花园物业管理系统为例,包含答辩的问题和答案
  • CORS配置实战:SpringBoot与Vite项目的本地联调解决方案
  • 长沙学做网站建设wordpress图片全部压缩
  • [cpprestsdk] 统一资源标识符 | uri_builder
  • 网站开发与运维收费明细报社网站开发做什么