我需要"if"去一次,但不能结束循环



我正在制作一个程序以用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"以获取更多想法并找到最佳的需求。

最新更新