2015-01-20 8 views
2

Возможно ли чистое обнаружение ключа, удерживаемого в (идеально родном) Python (2)? В настоящее время я использую Tkinter для обработки событий на клавиатуре, но то, что я вижу, это то, что когда я держу клавишу вниз, Key, KeyPress и KeyRelease события постоянно стреляют, а не ожидаемые KeyPress один раз и KeyRelease на конец. Я подумал об использовании времени между событиями, чтобы попытаться различать повторное стрельбу и фактическое событие, но время кажется непоследовательным - таким образом, хотя это выполнимо, кажется, что это боль.Продвинутые события клавиатуры Python?

Наряду с тем, есть ли способ обнаружить несколько нажатий клавиш (и все удерживаются?) Я бы хотел, чтобы только что использовали KeyPress и KeyRelease, чтобы обнаружить начало/конец нажатых клавиш, но что, похоже, не работает.

Любые советы приветствуются.

Спасибо!

+0

зависит от os ... но я считаю, что вы можете использовать 'kbhit' –

+0

Я запускаю Linux, просто fyi – Vasu

+0

в этом случае я бы посмотрел на эту тему http://stackoverflow.com/questions/292095/ polling-the-keyboard-in-python –

ответ

2

Используйте KeyUp и KeyDown обработчик с глобальным массивом:

keys = [] 

def down(event): 
    global keys 
    if not event.keycode in keys: 
     keys.append(event.keycode) 

def up(event): 
    global keys 
    keys.remove(event.keycode) 

root.bind('<KeyPress>', down) 
root.bind('<KeyRelease>', up) 

Теперь вы можете проверить несколько записей в keys. Чтобы удалить описанное вами непрерывное поведение, вам необходимо сравнить предыдущее состояние keys после того, как произойдет событие.

+0

Как это решение? –

+0

Я еще не тестировал это, но поведение, которое я заметил, состоит в том, что события продолжают стрелять - то есть, как события, связанные с клавиатурой, так и keydown, срабатывают многократно (keyup, keydown, keyup, keydown и т. Д.), В то время как ключ удерживается. Если я не ошибаюсь, сохранение состояний не поможет устранить эту проблему? – Vasu

+0

Протестировано, и такое же поведение происходит, т. Е. С нажатой одной клавишей переменная 'keys' циклически перемещается между одной записью и 0 элементами, то есть' [] 'и' [112] '. – Vasu

Смежные вопросы