wx.KeyEvent и не QWERTY-клавиатуры - PullRequest
0 голосов
/ 12 июня 2019

Я работаю с wxPython, мостом Python к wxWidgets, так что я думаю, что пользователь wxWidgets мог ответить.Я играю с классом KeyEvent и, поскольку я тестирую свой код на других платформах и других клавиатурах, я сделал невероятное (для меня) открытие: другие раскладки клавиатуры, похоже, не очень хорошо поддерживаются.

Вот что я имею в виду: если вы запускаете демонстрационную версию (KeyEvents.py в моем случае) и нажимаете случайные буквы с помощью QWERTY-клавиатуры, все работает.Переключитесь на другой макет, все еще работает ... несколько.Прямо сейчас у меня есть клавиатура AZERTY, в основном используемая во Франции, поэтому, когда я нажимаю клавишу a (которая находится на английской позиции q), выдается «a».Все идет нормально.Но если я нажимаю é (клавиша, которая находится на английской клавише 2), сообщается о 2.Чтение документации не помогло мне понять, что происходит.Такого рода ошибку никто не заметил, так как wx отсутствует?Я бы догадался и надеюсь, что нет, но лучше поздно, чем никогда.

Чтобы быть более техническими, события KeyDown и KeyUp имеют эту проблему.У меня есть клавиша AZERTY, я нажимаю клавишу 2, и сообщается о 2, тогда как é отображается на экране.Следует признать, что событие Char действительно сообщает о é, но, если я правильно понял, событие Char не инициируется ни в каком контексте, а событие KeyDown инициируется.Возможно, я что-то здесь упустил, и, возможно, это решение для меня и международных пользователей.

Заранее спасибо за ваш ответ,

1 Ответ

1 голос
/ 12 июня 2019

Событие Char не запускается ни в каком контексте, событие KeyDown инициируется.

False.

Поскольку каждая страна имеет собственную раскладку клавиатуры, wxWidgets отправляет двасобытия, когда клавиша нажата: One (событие клавиши) является несколько аппаратным кодом для этой клавиши;другое (событие char) - это «переведенный» код, обычно точка Unicode, но код ASCII, если вы отключили поддержку Unicode.

Keyevent полезно, если вы просто хотите что-то сделать с помощью нажатия клавиши илисобытияЕсли вы работаете с символами, используйте только событие типа char.

...