Python 移动事件上的鼠标侦听器

Python 移动事件上的鼠标侦听器,python,python-3.x,listener,pynput,Python,Python 3.x,Listener,Pynput,我只想在鼠标移动到(0,0)时锁定鼠标位置,直到我按下键盘上的“a”键,然后程序终止,我再次控制鼠标。 据我在这段代码中所知,每当我移动鼠标时,都会调用poschange()方法,并且必须将鼠标位置设置回(0,0)并再次重复,直到鼠标侦听器线程终止,但它只工作两次,poschange()中的print语句功能在控制台中打印两次,然后鼠标变慢,当我按下“a”键时,监听器必须停止,程序必须终止,但没有。我必须手动执行,只有鼠标再次变快和正常。但是,当我从代码中删除行pynput.mouse.Cont

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


有人能告诉我为什么,告诉我这有什么问题吗。提前感谢。

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

我想你可以通过打电话来获得预期的行为

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()

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

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