Как получить последнюю клавишу нажатой в Python?
Сначала я хочу сказать, что я знаю, что есть решение с проклятиями.
Моя программа представляет собой цикл while, который запускается каждую секунду. Каждую секунду я хочу получить последнюю клавишу, которая была или была нажата. Поэтому, если вы нажимаете клавишу во время спящего цикла, я хочу, чтобы она была сохранена, чтобы я мог получить клавишу, которая была нажата последней, даже если она больше не нажата. Я не хочу, чтобы сохраненный ключ был "удален" после его получения. Поэтому, когда пользователь нажимает клавишу "а", я хочу получать его каждую секунду, пока он не нажмет другую клавишу. Если была нажата определенная клавиша, я хочу напечатать текст. Этот текст я хочу записать в файл, используя перенаправление stdout:
./test.py > file.txt
Моя Python-программа, решенная с помощью curses, выглядит так:
import curses
from time import sleep
stdscr=curses.initscr()
stdscr.nodelay(1)
curses.noecho()
curses.cbreak()
while True:
char=stdscr.getch()
if char == 111: #111 = "o" key
print("test")
break
elif char == 97 #97 = "a" key
#code that have to be run every second
#if the a key is the last pressed key!
sleep(1)
curses.nocbreak()
curses.echo()
curses.endwin()
Проблема этого решения в том, что проклятия дают мне сумасшедший результат. Я нажимаю только один раз клавишу "o" и после остановки программы file.txt выглядит так:
^[[?1049h^[[1;30r^[(B^[[m^[[4l^[[?7h^[[H^[[2Jtest
^[[30;1H^[[?1049l^M^[[?1l^[>
Но это должно выглядеть так:
test
Я был бы очень признателен, если бы кто-то написал ответ. Я знаю, что python не лучший выбор для программ, использующих события нажатия клавиш. Но у меня есть причины, почему я использую Python для этого.
Заранее большое спасибо за ваши ответы.
1 ответ
Вы можете установить и использовать getch
пакет.
import getch
from time import sleep
while True:
char = getch.getch()
if char == 111:
print("test")
break
sleep(1)
(вам может понадобиться getch.getche
вместо getch.getch
, Это не совсем понятно из твоего вопроса)