我正在制作一个程序以用WASD控制鼠标,但是每当我按下按钮时,鼠标才会在需要稍微移动时移动到屏幕顶部,然后能够如果我再次按键
,请再次移动我试图关闭循环然后重新打开,但是它才能结束循环,然后才能重新打开。
import keyboard
from pynput.mouse import Controller
mouse = Controller()
repeat = True
while repeat:
if keyboard.is_pressed('w'):
mouse.move(0, -5)
if keyboard.is_pressed('s'):
mouse.move(0, 5)
当我按W时,我需要它稍微向上移动
您可能希望键盘不那么敏感,因此您可能需要对压制时间进行采样。在这种情况下,sleep
可以提供帮助。在下面的代码中,该程序每次输入while
循环时都会入睡0.2
秒。
import keyboard
import time
repeat = True
while repeat:
time.sleep(0.2)
if keyboard.is_pressed('w'):
mouse.move(0, -5)
if keyboard.is_pressed('s'):
mouse.move(0, 5)
# do something
编辑:我误解了您想要的东西,只有sleep
就足够了。问题是因为您的计算机执行所有操作太快了,因此可能以微秒或更少的时间完成一个段循环。因此,它看到您按键太长(尽管您认为自己很快(,然后它重复循环直到释放键。这就是为什么鼠标总是移至顶部的原因。
采样是告诉计算机"如果您完成的,然后睡觉,不要做其他事情"的方式。
另一种方法是计算它循环的次数(即缩放(,但是看起来像转储,因为计算机必须做毫无价值的事情。
import keyboard
from pynput.mouse import Controller
mouse = Controller()
repeat = True
w_count, s_count = 0, 0
while repeat:
if keyboard.is_pressed('w'):
w_count += 1
if w_count == 10: # i'm scaling it
mouse.move(0, -5)
w_count = 0
if keyboard.is_pressed('s'):
s_count += 1
if s_count == 10: # i'm scaling it
mouse.move(0, 5)
s_count = 0
还有其他方法:测量紧迫时间,边缘检测(检测键发行(...您可以搜索"软件bebouncing"以获取更多想法并找到最佳的需求。