Обнаружение нажатия клавиши, но только один раз. Клавиатурный модуль не работает таким образом - PullRequest
1 голос
/ 08 июня 2019

Я хочу обнаружить нажатие клавиши, и когда оно удастся, я хочу сделать что-то один раз.Если я использую модуль клавиатуры для этого, он несколько раз говорит.

Я пробовал другие модули, но не могу понять.

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 голосов
/ 08 июня 2019

Если вы хотите остановить запуск цикла после нажатия, вы можете добавить 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 преобразуется в True и False, что явно не будет выполняться в операторах и .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...