目录
功能描述
运行脚本后用鼠标拖拽选择屏幕上需要截图的区域,确认后将选中的区域放到剪贴版中,可粘贴其他程序中进行使用
功能拆解
截取屏幕画面
获取鼠标移动、点击、位置信息
裁剪图片
实时显示选中的部分
将图片添加到剪切板
技术方案
依赖
tkinter
tkinter 负责显示和处理鼠标的操作
全屏显示窗口
# 置顶
root.attributes('-topmost', True)
# 全屏
root.attributes('-fullscreen', True)
监听鼠标动作
label.bind('<Button-1>', self.onHoldLeftButton)
label.bind('<B1-Motion>', self.onHoldLeftButtonMove)
显示按钮到指定位置
toolkit.place(x=self.end_x, y=self.end_y, anchor='ne')
pillow
pillow 负责图片操作
截取全屏截图
ImageGrab.grab()
绘制矩形
dImage = ImageDraw.Draw(img)
dImage.rectangle(pos, outline='red', width=2)
裁剪图片
image.crop(pos)
ctypes
ctypes 调用Windows原生API操作剪切板
windows剪贴板函数
HANDLE SetClipboardData(
[in] UINT uFormat,
[in, optional] HANDLE hMem
);
ctypes调用
user32 = ctypes.windll.user32
user32.SetClipboardData.argtypes = [UINT, HANDLE]
user32.SetClipboardData.restype = HANDLE
user32.SetClipboardData(type, ctypes.c_char_p(alloc))
执行流程
- 截取全屏截图,全屏显示到屏幕上。
- 监听鼠标点击和移动操作,将点击位置和光标当前位置作为矩形的对角。
- 根据光标当前位置显示确认按钮
- 在全屏截图上将这个矩形描边绘制,重新显示到屏幕上
- 点击确认后将选中区域裁剪出来存入剪贴板
具体实现
通过tkinter定义窗口
import tkinter as tk
from PIL import ImageGrab, ImageTk
import image
class Window:
def