在Python中单击或按下按钮时获取鼠标位置

问题描述 投票:0回答:2

我想获取鼠标的

x, y
位置(在
windows 11
中)并在代码的其余部分中使用该位置。

我尝试了两个不同的模块,但似乎都不起作用。

  1. pyautogui(用于单击鼠标或按下按钮)
  2. 键盘(用于按下按钮)

到目前为止,我能够获取当前位置(使用

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 循环。

我不确定为什么,但注释掉该行可以纠正问题。

python keyboard pyautogui
2个回答
0
投票

我注意到由于某种原因,

print(pyautogui.displayMousePosition())
代码行因跳出循环而产生了问题。

当上面的

print
声明被删除时,我就可以使用任何模块了:

  • pynput
  • 键盘

所以这段代码适用于`键盘模块:

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

我发布这个答案以防其他人遇到同样的情况。


0
投票

回复很晚了,但你的代码产生的原因是因为

pyautogui.displayMousePosition()

用于在 CMD 中显示鼠标的位置,这是一个 while true 循环。希望这能解释原因:)

© www.soinside.com 2019 - 2024. All rights reserved.