Я работаю с wxPython, мостом Python к wxWidgets, поэтому я думаю, что пользователь wxWidgets мог бы ответить. Я играю с классом KeyEvent, и поскольку я тестирую свой код на других платформах и других клавиатурах, я сделал невероятное (для меня) открытие: другие раскладки клавиатуры, похоже, не очень хорошо поддерживаются.
Вот что я имею в виду: если запустить демо (KeyEvents.py в моем случае) и нажать на случайные буквы, с QWERTY-клавиатурой все работает. Переключитесь на другой макет, все еще работает... отчасти. Прямо сейчас у меня есть клавиатура AZERTY, в основном используемая во Франции, поэтому, когда я нажимаю клавишу (которая находится на английской позиции q), сообщается «a». Все идет нормально. Но если я нажимаю é (клавиша, которая находится на английской клавише 2), сообщается 2. Чтение документации не совсем помогло мне понять, что происходит. Это какая-то ошибка, которую никто не заметил с тех пор, как вышел wx? Я бы догадывался и надеялся бы, что нет, но, думаю, лучше поздно, чем никогда.
Чтобы быть еще более техническим, события KeyDown и KeyUp имеют эту проблему. У меня есть клейборд AZERTY, я нажимаю клавишу 2, и появляется 2, а на экране пишется é. По общему признанию, событие Char сообщает об é, но, если я правильно понял, событие Char не запускается ни в каком контексте, в котором запускается событие KeyDown. Возможно, я что-то упустил, и, возможно, это решение для меня и международных пользователей.
Заранее спасибо за ответ,
Возможно, это то, как вы описали проблему, но я не понимаю, в чем ваша проблема. Вы говорите, что ключ 2 сообщается, ну, по сути, это не более чем метка для ключа, его можно было бы назвать «собачьим печеньем». event.GetUnicodeKey() сообщит о возвращенном видимом символе. У вас также есть GetRawKeyCode, если это не взломает его.






Char event is not triggered in any context a KeyDown event is triggered.
Ложь.
Поскольку в каждой стране своя раскладка клавиатуры, wxWidgets отправляет два события при нажатии клавиши: одно (событие клавиши) представляет собой аппаратный код для этой клавиши; другое (событие char) — это «переведенный» код, обычно это точка Unicode, но код ASCII, если вы отключили поддержку Unicode.
Keyevent полезен, если вы просто хотите что-то сделать с событиями нажатия или нажатия клавиши. Если вы работаете с символами, используйте только событие char.
Ха, это проясняет ситуацию. Я был сбит с толку, когда пытался обработать документ, казалось странным, что этого не произошло, так что, очевидно, я что-то упустил :D. Спасибо за разъяснения!
Вы говорите, что о персонаже «сообщают». Как? Используете ли вы метод GetUnicodeKey для экземпляра wxKeyEvent, доставленного обработчику событий? Если нет, вы должны попробовать это.