клавиатуры.press_and_release и keyboard.send каким-то образом отстают? - PullRequest
0 голосов
/ 29 апреля 2020

Я пишу программу, в которой есть игра l oop, которая ищет различные нажимаемые клавиши в качестве индикаторов для определенных действий (по сути, превращая определенные клавиши в кнопки, которые выполняют свои функции при нажатии):

import keyboard
import sys
import time

ticks = 0 #counts number of game loop iterations that have been done
while True:
    starttick = time.time() #used to record how much time the tick takes, to keep it stable at 20 tps.
    ticks += 1
    if keyboard.is_pressed('q'): #q is for quit
        keyboard.send('backspace', do_press=True, do_release=True)
        sys.exit()
    endtick = time.time()
    if keyboard.is_pressed('t'): #t is for ticks
        keyboard.send('backspace', do_press=True, do_release=True)
        print(ticks)

    time.sleep(abs(.05 - (endtick - starttick))) #Finds how much time the tick took, and then subtracts that from 1/20th of a second to wait the appropiate time (abs is for avoiding negative wait times.)

Смысл keyboard.send('backspace', do_press=True, do_release=True) состоит в том, чтобы удалить нажатый символ из консоли (я делаю это в Kubuntu.) Однако, что в итоге происходит, когда я нажимаю или удерживаю T, это:

t1571
1572
1573
1574
1575
1576
1577
1578
1579

Как видите, до выхода первого тика все еще впереди, и это именно то, чего я пытаюсь избежать. (В этом случае следует отметить, что я все время удерживаю t).

Аналогичная раздражающая вещь происходит, когда я нажимаю (нажимаю или удерживаю) q- это почти сразу же после возврата, но есть ~ полсекундная задержка перед выходом из программы.

Первоначально я использовал keyboard.press_and_release('backspace'), и, заметив проблему, я переключился на keyboard.send, но это не помогло устранить лаг.

Кто-нибудь знает, как избежать этих проблем?

...