问题描述
我有类标签和 (x,y) 坐标,我想基于这些来控制基本的鼠标操作。到目前为止,我可以执行移动鼠标,单击(鼠标左键),双击和右键单击等操作。 我面临的问题是光标移动到绝对位置,但我想让它从最后一个位置移动。 这是函数:
import mouse as m
def OperateMouse(mX,mY,sW,sH,classLabl):
if classLabl == "Close":
print("Close Sign Detected... Exiting")
return False
if classLabl == "Move":
#mX = sW + ((mX - (sW/2))*sW/(sW/2)-(sH/2))
m.move(mX,mY)
elif classLabl == "SC":
m.click(button='left')
elif classLabl == "T_DC":
m.double_click(button='left')
elif classLabl == "RC":
m.right_click()
这里,mX 和 mY 是我从屏幕大小的一半的输出窗口获得的坐标,sW 和 sH 是屏幕宽度和高度。 在使用鼠标之前,我也尝试过 pyautogui。
这是我尝试的修改:
lX,lY = pyautogui.position()
print("Last Pos:",lX,lY)
print("Curnt Pos:",mX,mY)
print("Diff = ",mX-lX,mY-lY)
nX,nY = mX-lX,mY-lY
mX,mY = mX+nX,mY+nY
#m.move(mX-lX,mY-lY)
try:
pyautogui.move(mX,mY)
if pyautogui.failSafeCheck():
raise pyautogui.FailSafeException()
except:
print("FailSafe Exception")
不起作用,当它跳到右下角时引发 FailSafe 异常
解决方法
PyAutoGUI 支持绝对移动和相对移动。
-
pyautogui.moveRel(xOffset,yOffset)
相对于其当前位置移动鼠标。 -
pyautogui.moveTo(x,y)
移动到指定的屏幕坐标。
如果您查看 PyAutoGUI source code,您可以看到 move()
只是在 v1.0 中添加的 moveRel()
的别名
如果您想将坐标从窗口空间转换为屏幕空间,您需要先计算窗口在屏幕空间中的位置,并在计算屏幕空间坐标时将其用作偏移量。