鼠标按下时打印

2 投票
1 回答
3303 浏览
提问于 2025-04-18 11:34

我正在使用PyMouse(Event)来检测鼠标按钮是否被按下:

from pymouse import PyMouseEvent

class DetectMouseClick(PyMouseEvent):
    def __init__(self):
        PyMouseEvent.__init__(self)

    def click(self, x, y, button, press):
        if button == 1:
            if press:
                print("click")
        else:
            self.stop()

O = DetectMouseClick()
O.run()

到目前为止,这个方法是有效的,但我现在想要循环执行print("click"),直到鼠标不再被按下……我尝试过:

def click(self, x, y, button, press):
    if button == 1:
        if press:
            do = 1
            while do == 1:
                print("down")
                if not press:
                    do = 0

还有类似的尝试:

while press:
    print("click")

有人能帮我吗?谢谢!

1 个回答

3

我觉得正如Oli在评论中提到的,当你按住鼠标按钮时,并不是一直有点击的信号,所以你需要在一个循环里放入print。如果while循环在同一个线程里运行,就会阻止鼠标释放时触发点击事件。因此,我能想到的实现你想要的效果的方法,就是在一个单独的线程里执行print("click")

我不是Python程序员,但我尝试了一下,结果在我的机器上(Windows 8.1上的Python 2.7)可以运行:

from pymouse import PyMouseEvent
from threading import Thread

class DetectMouseClick(PyMouseEvent):
    def __init__(self):
        PyMouseEvent.__init__(self)

    def print_message(self):
        while self.do == 1:
            print("click")

    def click(self, x, y, button, press):
        if button == 1:
            if press:
                print("click")
                self.do = 1
                self.thread = Thread(target = self.print_message)
                self.thread.start()
            else:
                self.do = 0
                print("end")
        else:
            self.do = 0
            self.stop()

O = DetectMouseClick()
O.run()

撰写回答