Я знаю, что этот вопрос длинный, но то, что я действительно хочу знать, выделено жирным шрифтом.
Я бы предпочел использовать python в Linux.
Я пытаюсь сделать новую раскладку клавиатуры вроде devorak, но раскладка настроена на layout1 или layout2 в зависимости от того, удерживаете ли вы горячую клавишу или нет (горячая клавиша, вероятно, должна быть ctrl?)
например. нажмите d -> "z" распечатывает на экране, используя раскладку клавиши1
например. нажмите ctrl d -> «x» для печати на экране с помощью клавиши layout2
Моя главная проблема (и вопрос, на который нужно ответить) - способ вывода символов на экран.
если кто-то нажимает клавиши (в этом порядке) "(a) (b) (c) (d) (ctrl + d) (shift + e = E) (f) (Enter)"
теперь допустим, что вывод для этих нажатий клавиш должен быть «oijzxKb»
Я не хочу, чтобы вывод отображался с новыми строками:
o
i
j
z
x
K
b
Я хочу, чтобы символы мгновенно появлялись на экране при нажатии каждого символа (не дожидаясь их нажатия клавиши ввода).
e.g.
press o
Screenshot1 o
press i
Screenshot2 oi
press j
Screenshot3 oij
.. etc
Полагаю, мне понадобится следующее:
- способ мгновенного считывания нажатий клавиш
- способ мгновенной печати нажатий клавиш (в терминал, в графический интерфейс или в другое удобное место, если он работал на любом редакторе, который был бы крут!)
Возможно, я мог бы сделать это в PyGame (но тогда я, вероятно, не смог бы вырезать, вставлять и т. Д.), И я предполагаю, что должен быть более простой способ.
Я использую клавиатуру Logitech G110, возможно, мне захочется использовать ее в качестве альтернативы клавиатуре qwerty во всех моих приложениях на всех моих устройствах.
Спасибо!
РЕДАКТИРОВАТЬ: РЕШЕНИЕ:
Благодаря первому ответу,
используя Getch из http://code.activestate.com/recipes/134892/
getch = _Getch()
word=""
while True:
c=getch.impl()
if c=="a":
word+="z"
elif ord(c)==127: #backspace
word=word[:-1]
else:
word+=c
print word
Этого хватит, пока спасибо. Как только я доволен доработкой, я посмотрю на что-то более низкое, специфичное для операционной системы без python.
Одна проблема с getch, однако, заключается в том, что ctrl + a нельзя различить между ctrl + A (например, если вы удерживаете Ctrl и нажимаете клавиши, он не может определить разницу между прописными и строчными буквами)