我想获取鼠标的
x, y
位置(在 windows 11
中)并在代码的其余部分中使用该位置。
我尝试了两个不同的模块,但似乎都不起作用。
到目前为止,我能够获取当前位置(使用
pyautogui
),但是我无法跳出 while 循环以继续执行下一段代码,甚至返回函数。
这是我尝试过的功能:
import time
import pyautogui
import keyboard
def spam_ordinates():
''' function to determin the mouse coordinates'''
print('press "x" key to lock position...')
while True:
# Check if the left mouse button is clicked
time.sleep(0.1)
print(pyautogui.displayMousePosition())
# various methods i have tried ...
if keyboard.is_pressed('x'):
print('x key pressed...')
break
if pyautogui.mouseDown():
print("Mouse clicked!")
break
if pyautogui.keyDown('x'):
print('x key pressed (autogui)...')
break
# Get the current mouse position
x, y = pyautogui.position()
print(f'spam at position: {x}, {y}')
return x, y
# call function
ords = spam_ordinates()
我看到这样的答案: Python 在单击时获取鼠标 x、y 位置,但不幸的是它实际上并没有在
mouse click
或 button press
上返回值。
那么,我怎样才能跳出 while 循环,使函数返回鼠标的
x, y
位置?
更新
看起来好像
print(pyautogui.displayMousePosition())
正在阻止代码跳出 while 循环。
我不确定为什么,但注释掉该行可以纠正问题。
我注意到由于某种原因,
print(pyautogui.displayMousePosition())
代码行因跳出循环而产生了问题。
当上面的
print
声明被删除时,我就可以使用任何模块了:
所以这段代码适用于`键盘模块:
def spam_ordinates():
''' function to determin the mouse coordinates'''
print('press "x" key to lock position...')
while True:
# Check if x key is pressed
time.sleep(0.1)
if keyboard.is_pressed('x'):
print('x key pressed...')
break
# Get the current mouse position
x, y = pyautogui.position()
print(f'spam at position: {x}, {y}')
return x, y
我无法完全解释为什么
print(pyautogui.displayMousePosition())
会导致此错误,除了它一定是阻塞了会引起中断的 if statements
。
我发布这个答案以防其他人遇到同样的情况。