python 自动点击器启动,但不会暂停,除非它被杀死

zbdgwd5y  于 2023-01-08  发布在  Python
关注(0)|答案(2)|浏览(127)

我是python新手,我正在开发一个小的自动点击器,你可以用字母“s”打开和关闭它,但是当我按下它的时候,自动点击器启动了,但是我不能关闭它,除非我用字母“k”来完全停止程序,这是我的代码看起来像什么:

from pynput.mouse import Controller, Button
import keyboard as kb
import time
import multiprocessing

def click():
    
    isToggled = False
    mouse = Controller()

    while True:
        if isToggled:
            mouse.click(Button.left)
            time.sleep(0.01)
        
        if kb.is_pressed('s'):
            if isToggled:
                isToggled = False
            else:
                isToggled = True

        elif kb.is_pressed('k'):
            break

if __name__ == '__main__':
    p = multiprocessing.Process(target=click)
    p.start()
    p.join()
nbysray5

nbysray51#

这是因为只要s被按住,kb.is_pressed('s')的值就会变成True,所以isToggled会在TrueFalse之间快速切换,直到你松开键,谁也猜不出它会是什么值。
解决这个问题的一个方法是锁定isToggled,使其不会被多次设置,直到s被释放。

key_locked = False 
while True:
    ...
    if kb.is_pressed('s'):
        if key_locked:
            continue
        
        key_locked = True
        if isToggled:
            isToggled = False
        else:
            isToggled = True
    else:
        key_pressed = False

    if kb.is_pressed('k'):
        break
pkbketx9

pkbketx92#

问题是kb.is_pressed('s')函数在键被按住时返回true,所以每次while循环运行时,isToggled都被翻转,并且因为如果isToggled为true,则存在休眠,所以更有可能的是,当您释放键时,您最终得到的是这个值。
你可以通过添加另一个变量来解决这个问题,这个变量存储上一次迭代中是否按下了这个键,如果没有按下,则只翻转isToggled。另外,顺便说一句,isToggled变量的翻转可以稍微简化一些。更新后的代码如下所示:

from pynput.mouse import Controller, Button
import keyboard as kb
import time
import multiprocessing

def click():
    isToggled = False
    wasPressed = False
    mouse = Controller()

    while True:
        if isToggled:
            mouse.click(Button.left)
            time.sleep(0.01)

        if kb.is_pressed('s'):
            if not wasPressed:
                isToggled = not isToggled

        elif kb.is_pressed('k'):
            break

        wasPressed = kb.is_pressed('s')

if __name__ == '__main__':
    p = multiprocessing.Process(target=click)
    p.start()
    p.join()

相关问题