Поймать удар по клавиатуре не надежно / Python - PullRequest
0 голосов
/ 13 сентября 2018

Предпосылкой является разработка программы, которая работает в бесконечном цикле, для чтения живых данных откуда-то.Я хочу, чтобы этой программой управляли взаимодействия через клавиатуру (без 'Enter').С этой целью я наткнулся на следующий фрагмент:

import msvcrt

def keypress():
    try:
     if msvcrt.kbhit(): #Keyboard hit?
        key = msvcrt.getch().decode("utf-8").lower()    
        return key
    except UnicodeDecodeError:
     pass

while not False:
    print('rainy rainy rain rain')
    if keypress() == "e": #e: exit
        exit()
    if keypress() == "w": # w: wait
        waiting = True
        while waiting == True:
            print("waiting waiting waiting")
            if keypress() == "w":
                waiting = False

Я знаю, что это легкомысленно вызывать новый бесконечный цикл просто для ожидания, но сумасшедшая вещь, когда удар по «е» кажется более успешнымчем хит "ш".Но в каждом случае несколько хитов вообще не регистрируются вовсе.-> Есть ли способ решить эту проблему?Windows также способна отлавливать каждое нажатие клавиатуры!

1 Ответ

0 голосов
/ 13 сентября 2018
while not False:
 print('rainy rainy rain rain')
 key = keypress()
 if key == "e": #e: exit
    exit()
 if key == "w": # w: wait
    waiting = True
    while waiting == True:
        print("waiting waiting waiting")
        if keypress() == "w":
            waiting = False

... это небольшое изменение, решило проблему. Я думаю, что вызов keypress () [и, следовательно, также функции msvcrt.getch ()] занимает «много» времени, что препятствует распознаванию другого нажатия клавиатуры. Но почему? Не должен ли удар по ключу быть забуференным !? И поэтому прошедшее время не должно иметь значения!?

...