Mat*_*t W 7 python mouse user-interface store input
我对 Python 非常陌生,需要一种方法来完成我之前在宏脚本语言中完成的重要功能:
我有一个 Python 程序,它将使用 pyscreenshot 处理屏幕截图图像。为了向 pyscreenshot 提供创建图像所需的 x1、y1、x2、y2 坐标,我需要用户通过在屏幕周围绘制矩形来定义屏幕部分。想想 Windows 中的“截图”工具和 OSX 中的 cmd+shift+4。
我愿意使用任何必要的 BSD 模块,但我需要 OSX 和 Windows 的模块支持。
我找到的每个示例都是关于如何在画布内或现有图像文件上绘制矩形的。这些示例对我没有帮助,因为我需要绘制坐标并相对于用户选择的任何操作系统窗口。
非常感谢你的帮助!!!
查看了在 opencv、pyautogui、tkinter 中绘制矩形的教程,但所有这些都是在程序绘制的窗口或画布上绘制矩形,而不是操作系统。
我首先会抓取当前桌面的屏幕截图,将其显示在 中Canvas,然后让用户在其上绘制一个矩形。然后检索矩形的边界框并在桌面上执行实际的抓取。下面是一个基本示例(拖动以创建图像):
import tkinter as tk
from PIL import ImageGrab, ImageTk
class GUI(tk.Tk):
def __init__(self):
super().__init__()
self.withdraw()
self.attributes('-fullscreen', True)
self.canvas = tk.Canvas(self)
self.canvas.pack(fill="both",expand=True)
image = ImageGrab.grab()
self.image = ImageTk.PhotoImage(image)
self.photo = self.canvas.create_image(0,0,image=self.image,anchor="nw")
self.x, self.y = 0, 0
self.rect, self.start_x, self.start_y = None, None, None
self.deiconify()
self.canvas.tag_bind(self.photo,"<ButtonPress-1>", self.on_button_press)
self.canvas.tag_bind(self.photo,"<B1-Motion>", self.on_move_press)
self.canvas.tag_bind(self.photo,"<ButtonRelease-1>", self.on_button_release)
def on_button_press(self, event):
self.start_x = event.x
self.start_y = event.y
self.rect = self.canvas.create_rectangle(self.x, self.y, 1, 1, outline='red')
def on_move_press(self, event):
curX, curY = (event.x, event.y)
self.canvas.coords(self.rect, self.start_x, self.start_y, curX, curY)
def on_button_release(self, event):
bbox = self.canvas.bbox(self.rect)
self.withdraw()
self.new_image = ImageTk.PhotoImage(ImageGrab.grab(bbox))
self.attributes('-fullscreen', False)
self.title("Image grabbed")
self.canvas.destroy()
self.deiconify()
tk.Label(self,image=self.new_image).pack()
root = GUI()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)