仅检测一次按键。键盘模块无法正常工作

时间:2019-06-07 23:37:48

标签: python keypress

我想检测一个按键,当它发生时,我想做一次操作。如果我为此使用键盘模块,它会多次声明。

我尝试了其他模块,但无法弄清楚。

import turtle
import keyboard

count_a = 5

#screen
wn = turtle.Screen()
wn.bgcolor("black")
wn.setup(width=800, height=600)
wn.tracer(0)

#pen
pen= turtle.Turtle()
pen.speed(0)
pen.color("white")
pen.penup()
pen.hideturtle()
pen.write(count_a, align="center", font=("courier", 24, "normal"))

#main
while True:
    wn.update()

    if keyboard.is_pressed('a'):
        count_a -= 1
        pen.clear()
        pen.write(count_a, align="center", font=("courier", 24, "normal"))

如果在我的程序中按“ a”,则计数将大大降低,然后变为-1。如果您按下一次,我只想将计数设为4。

1 个答案:

答案 0 :(得分:0)

如果要在发生按下操作后停止运行循环,则可能需要添加break

while True:
    wn.update()

    if keyboard.is_pressed('a'):
        count_a -= 1
        pen.clear()
        pen.write(count_a, align="center", font=("courier", 24, "normal"))

        break # <- 

尽管如此,这将停止循环。虽然,如果希望它阻止代码在if循环内执行,并且只运行一次该语句,则可以添加一个标志,该标志在第一次按下后停止。

如果您想在第一次运行if后停止执行代码

#main
waitingForA = True
while True:
    wn.update()

    if keyboard.is_pressed('a') and waitingForA: # <-
        count_a -= 1
        pen.clear()
        pen.write(count_a, align="center", font=("courier", 24, "normal"))

        waitingForA = False # <-

请注意,我是如何添加waitForA变量的,然后在第一次按下后将其设置为False,这将使if语句停止运行,因为if语句解析为TrueFalse,显然不会在语句中运行。