在 python 中检测鼠标点击,无需通过循环进行大量检查

Detecting a mouse click in python, without extensive checking via loops

提问人:randomDjude 提问时间:9/27/2023 最后编辑:randomDjude 更新时间:9/27/2023 访问量:47

问:

编辑:我找到了解决方案,不要费心回答

我希望我的程序在后台运行,并在单击显示器的指定区域后执行代码块。我可以通过运行一个循环来检查鼠标是否被点击以及它是否在该区域中来做到这一点,但我担心我的输入会在更新之间被吃掉。 因此,我希望程序基本上暂停,并且仅在单击鼠标后运行。

我尝试了鼠标库的 mouse.on_click() 函数,但是在测试环境中运行时,无论我是否单击,我的程序都会运行代码,然后在我点击之前完成运行。代码如下所示:

import mouse

def check_for_game(x1, y1, x2, y2):
    mouse.on_click(check_hitbox(x1, y1, x2, y2))


def check_hitbox(x1, y1, x2, y2):
    if x1 <= mouse.get_position()[0] <= x2 and y1 >=   mouse.get_position()[1] >= y2:
        print("click in box detected")

check_for_game(0, 1000, 1000, 0)

可悲的是,我根本不熟悉基于事件的编程,所以我有点迷茫试图弄清楚这一点,我见过人们使用 mouse.hook() 函数,但这让我更加困惑。互联网也没有用......

编辑: 我使用 pynput 的鼠标监听器在线找到了解决这个问题的方法。对于任何有类似问题的人,这里是工作代码:

from pynput import mouse

def on_click(x, y, button, pressed):
    if pressed and str(button) == "Button.left":
        print(f"left button at {x}, {y}")
    

with mouse.Listener(on_click = on_click) as listener:
    listener.join()

仅当单击鼠标左键时,此代码才会将鼠标的坐标打印到控制台。

Python 事件 mouseevent

评论

0赞 D.L 9/27/2023
代码需要检查事件。目前它只有 2 个函数,从未被调用过。
0赞 Kovy Jacob 9/27/2023
Turtle 有一个 onclick 函数。

答: 暂无答案