python截图小工具(按键触发)

文章介绍了如何利用Python库Pynput实现按键触发,通过监听键盘和鼠标事件,捕捉坐标并输出大致图片,同时检测错误。主要涉及了按键控制、鼠标操作以及屏幕截图功能。
摘要由CSDN通过智能技术生成
'''
通过按键来触发
可以容错,不固定方位
如果有问题输出错误
如果没问题就输出两点的坐标
需求:
1、按键触发
2、输出大致图片
3、检测错误
'''
import pyautogui
import cv2
from pynput.keyboard import Key, Listener as Listener_K,Controller as Controller_K
from pynput.mouse import  Button, Listener as Listener_M,Controller as Controller_M
run_key = Key.ctrl_l# 按键触发,ctrl_l即左边的Ctrl键
coordinate = []#存储坐标x1,y1,x2,y2

def on_click(x, y, button, pressed):#监听鼠标
    if pressed:#按压打印
        print(f'{button} pressed at {x}, {y}')
        coordinate.extend([x,y])
    else:
        return False
def on_release(key):
    '释放按键时执行。'
    print(key)
    if key == run_key:  #可以改str类型来判断输入字母之类的
        return False# 停止监听,作为运行

if __name__ == '__main__':
    keyboard = Controller_K()#监听按键
    with Listener_K(on_release=on_release) as listener:
        listener.join()
    #监听到特定按键跳转
    print("鼠标点击")
    mouse = Controller_M()#监听鼠标
    for _ in range(2):
        with Listener_M(on_click=on_click) as listener:
            listener.join()
    print(coordinate)
    #如果没有特殊情况,就截图
    if coordinate[0]-coordinate[2]==0 or coordinate[1]-coordinate[3]==0:
        print("错误")
    else:
        #获取左上角坐标和差值
        coord,distance = [],[]
        for n in range(2):
            if coordinate[n]<coordinate[n+2]:
                coord.append(coordinate[n])
            else:
                coord.append(coordinate[n+2])
            distance.append(abs(coordinate[n]-coordinate[n+2]))
        img = pyautogui.screenshot(region=[coord[0],coord[1],distance[0],distance[1]])#左上角坐标和宽、高
        img.save("截图.jpg")

如果想要修改按键这里有测试用例,可以直观知道按键的使用,进行进一步修改。

from pynput.keyboard import Key, Listener, Controller
def on_press(key):
    '按压按键时执行。'
    try:
        print(key)
    except AttributeError:
       print(key)
def on_release(key):
    '释放按键时执行。'
    if key == Key.esc:  # esc
        # 停止监听
        return False
    try:
        print(key)
    except KeyError:
        print(key)
keyboard = Controller()
with Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

如果通过python文件转exe就可以双击使用,如果设计为循环就可以一直使用了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值