我是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()
2条答案
按热度按时间nbysray51#
这是因为只要
s
被按住,kb.is_pressed('s')
的值就会变成True
,所以isToggled
会在True
和False
之间快速切换,直到你松开键,谁也猜不出它会是什么值。解决这个问题的一个方法是锁定
isToggled
,使其不会被多次设置,直到s
被释放。pkbketx92#
问题是
kb.is_pressed('s')
函数在键被按住时返回true,所以每次while循环运行时,isToggled
都被翻转,并且因为如果isToggled
为true,则存在休眠,所以更有可能的是,当您释放键时,您最终得到的是这个值。你可以通过添加另一个变量来解决这个问题,这个变量存储上一次迭代中是否按下了这个键,如果没有按下,则只翻转
isToggled
。另外,顺便说一句,isToggled
变量的翻转可以稍微简化一些。更新后的代码如下所示: