Wx.KeyEvent и не QWERTY-клавиатуры

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

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

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

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

Вы говорите, что о персонаже «сообщают». Как? Используете ли вы метод GetUnicodeKey для экземпляра wxKeyEvent, доставленного обработчику событий? Если нет, вы должны попробовать это.

avariant 12.06.2019 19:25

Возможно, это то, как вы описали проблему, но я не понимаю, в чем ваша проблема. Вы говорите, что ключ 2 сообщается, ну, по сути, это не более чем метка для ключа, его можно было бы назвать «собачьим печеньем». event.GetUnicodeKey() сообщит о возвращенном видимом символе. У вас также есть GetRawKeyCode, если это не взломает его.

Rolf of Saxony 12.06.2019 19:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
113
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Char event is not triggered in any context a KeyDown event is triggered.

Ложь.

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

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

Ха, это проясняет ситуацию. Я был сбит с толку, когда пытался обработать документ, казалось странным, что этого не произошло, так что, очевидно, я что-то упустил :D. Спасибо за разъяснения!

vincent-lg 14.06.2019 18:11

Другие вопросы по теме