python(47) : 快速截图[Windows工具(2)]
1.说明
这是一个基于 PyQt5 的快捷截图工具,支持全局热键快速截图。
✨ 主要特点
🎯 全局热键:
Ctrl + Shift + X
随时启动截图🖼️ 可视化选区:亮青色边框,清晰标识截图区域
📁 自动编号:截图自动按顺序命名(1.png, 2.png...)
💾 本地保存:所有截图保存在
screenshots
文件夹
🎨 视觉效果
边框颜色:亮青色(非常醒目)
边框宽度:4像素实线
背景遮罩:30%透明度黑色遮罩
🚀 使用方法
启动程序:运行
python 快速截图.py
开始截图:按
Ctrl + Shift + X
框选区域:鼠标拖拽选择截图区域
自动保存:松开鼠标,截图自动保存
退出程序:按
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("🔚 程序已退出")