Позвольте мне предисловие к этому, сказав, что у меня нет опыта ввода данных в системах Windows или Mac, но вот что происходит на стороне Linux.
Основные события обычно следуют трехэтапной обработке перед достижением программы. Клавиатура генерирует сканкод. ОС преобразует scancode в код ключа. Карта клавиатуры преобразует код ключа в символ.
- сканкодов аппаратно специфичны и представляют расположение на клавиатуре
- Кодовых ключами являются значением карты OS в сканкоды, как правило, определенная в
/usr/include/linux/input.h
- символов клавиш символы, отображенная на коды клавиш, определяемых вашей раскладка. Вы можете проверить их с
xmodmap -pke
Для SDL (который PyGame выступает в качестве обертки вокруг), скан/скан различие немного нечеткой, и не очень важно. То, что он сообщает как «scancode», на самом деле является ключевым кодом, вы заметите, что 0gg event.scancode
pygame будет соответствовать значению «keycode», напечатанному в xev. Что SDL называет «sym», pygame называет «ключ» и действительно является ключевым кодом SDL. Клавиши представляют значение «unicode» события.
Важной частью этого является то, что вы на самом деле не получаете исходный scancode, поэтому можно ожидать, что он зависит от ОС, а не зависит от клавиатуры. Кроме того, если вы получаете исходный scancode, вы ожидаете, что scancodes будут эквивалентны положению, а не персонажу. Таким образом, все клавиши-1 col-1 производят один и тот же scancode независимо от раскладки клавиатуры.
Хотя может быть скучно выполнять проверки ОС и иметь массивные постоянные таблицы, это обычно так, как это делается. Хорошей новостью является SDL для вас, поэтому вы действительно должны использовать имена pygame.K_ *. Если поддержка нескольких раскладок клавиатуры является проблемой, подумайте о добавлении меню конфигурации ввода вместо таблиц жесткого кодирования для каждого макета.
Я хочу оставить некоторые ссылки для дальнейшего чтения, но я не совсем уверен, на что ссылаться. Сейчас я оставлю SDL Input Guide.
Если имена pygame работают, почему бы вам просто не использовать их? – BrenBarn