【问题标题】:Mouse Listener on_move event鼠标监听 on_move 事件
【发布时间】:2020-02-20 03:45:00
【问题描述】:
import pynput
import time

def poschange(x,y):
    #print(f"{x},{y}")
    print("poschange called")
    pynput.mouse.Controller().position = (0,0)

def stop(key):
        #print(key)
        try:
            if key.char == 'a':
                print("stopped")
                keyli.stop()
                mouli.stop()
                exit()
        except:
            pass

keyli = pynput.keyboard.Listener(on_press = stop)
keyli.start()
mouli = pynput.mouse.Listener(on_move = poschange)
mouli.start()
keyli.join()
mouli.join()

我只想将鼠标的位置锁定到 (0,0),直到我按下键盘上的“a”键,然后程序终止,我再次控制我的鼠标。 据我所知,每当我移动鼠标时,都会调用 poschange() 方法,并且必须将鼠标位置设置回 (0,0) 并再次重复,直到鼠标侦听器线程终止,但它只能工作两次, poschange() 函数中的打印语句在控制台中打印了两次,然后鼠标变得迟缓并且移动缓慢,当我按下“a”时,侦听器必须停止并且程序必须终止,但我不必手动执行它只有鼠标变得又快又正常。但是,当我从代码中删除行 pynput.mouse.Controller().position = (0,0) 时,事情会按我的意图工作,每次我移动鼠标时它都会打印打印语句“poschange called”,并且当我按下“a”键时程序会按预期终止。

谁能告诉我为什么,告诉我这有什么问题。提前致谢。

【问题讨论】:

    标签: python python-3.x listener pynput


    【解决方案1】:

    当您在光标改变其位置时触发的回调中移动光标位置时,您已使用对 .position 的调用创建了一个递归。

    我想你可能会通过调用它来获得预期的行为

    pynput.mouse.Controller().position = (0,0)
    

    在应用程序启动时并通过以下方式阻止事件传播:

    mouli = pynput.mouse.Listener(on_move=poschange, suppress=True)
    

    【讨论】:

      猜你喜欢
      • 2011-09-19
      • 2014-02-21
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      相关资源
      最近更新 更多