'''
通过按键来触发
可以容错,不固定方位
如果有问题输出错误
如果没问题就输出两点的坐标
需求:
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就可以双击使用,如果设计为循环就可以一直使用了。