如何在 Windows 上使用 python 3 创建和获取基本选择框的坐标?我需要它在屏幕/任何窗口的任何地方工作。例如,理想情况下你运行程序,然后无论你点击/按住/拖动,都会出现一个半透明的浅蓝色框,python 将注册坐标(它需要保存以备后用)。
我正在创建一个桌面工具,允许您选择屏幕的某些部分,类似于Capture2Text的区域选择的工作方式。它应该允许您选择视频游戏屏幕的一个区域(即显示的任何内容,无论是什么程序,无论是浏览器、蒸汽还是模拟器)。然后它会以某种方式截取屏幕截图,在获得所需坐标后可能使用 PIL 或 PyAutoGUI。
所以,我坚持区域选择步骤。我已经使用 OpenCV、Matplotlib、pygame、tkiner 和 Qt 遇到了可能的解决方案,但前两个只能在指定的窗口中工作,我不知道后两个是否一般在屏幕上工作(我是不打算尝试了解所有这些不同的库,而不知道我是否在正确的轨道上,或者这是否可能)。我什至不知道哪个对我的用例来说最简单,或者哪些库允许这种通用功能。
这是基于我发现的另一个 SO 答案的随机尝试,但它仅适用于预先保存的图像。
#ref(best?):/sf/ask/484123811/
import numpy as np
from PIL import Image
import matplotlib.widgets as widgets
def onselect(eclick, erelease):
if eclick.ydata>erelease.ydata:
eclick.ydata,erelease.ydata=erelease.ydata,eclick.ydata
if eclick.xdata>erelease.xdata:
eclick.xdata,erelease.xdata=erelease.xdata,eclick.xdata
ax.set_ylim(erelease.ydata,eclick.ydata)
ax.set_xlim(eclick.xdata,erelease.xdata)
fig.canvas.draw()
fig = plt.figure()
ax = fig.add_subplot(111)
filename="test.jpg"
im = Image.open(filename)
arr = np.asarray(im)
plt_image=plt.imshow(arr)
rs=widgets.RectangleSelector(
ax, onselect, drawtype='box',
rectprops = dict(facecolor='blue', edgecolor = 'black', alpha=0.5, fill=True))
plt.show()
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种直接在屏幕上工作而不需要提前截取屏幕截图的解决方案,因为我的应用程序应该与您正在玩的游戏一起使用而不会中断。
这只是我的应用程序所做的第一步(从用户的角度来看),我已经实现了之后发生的大部分事情(现在大约 3000 LoC),所以我正在寻找最直接的实现方式这样我就可以结束项目并使其可用。