Ввод Num Pad для Pygame? - PullRequest
       4

Ввод Num Pad для Pygame?

0 голосов
/ 18 января 2019

Я использую цифровую клавиатуру с pygame, и цифровая клавиатура не распознается.

Я знаю, что должен использовать приведенный ниже код, но не так:

if (event.key >= 0x100 and event.key <= 0x109)

Вот мой код для использования клавиши return :

if event.type == KEYDOWN and event.key != 300:
        if (event.key >= 0x100 and event.key <= 0x109 and event.key == pygame.K_RETURN):
....

Может кто-нибудь помочь?

Ответы [ 2 ]

0 голосов
/ 18 января 2019

На мой взгляд, лучшим подходом было бы создание set, состоящего из клавиатурных констант, и проверка на членство в нем. Тестирование членства для включения в set - это очень быстрый в Python, плюс создание его с использованием только символических констант, уже определенных pygame, делает ваш собственный код полностью независимым от их фактические значения.

Примерно так:

from pygame.locals import *

NUMPAD_KEYS = {K_KP0, K_KP1, K_KP2, K_KP3, K_KP4, K_KP5, K_KP6, K_KP7, K_KP8, K_KP9}

if event.key in NUMPAD_KEYS:
    # Do something...
0 голосов
/ 18 января 2019

Если вы хотите проверить, была ли нажата клавиша на клавиатуре, вы можете использовать следующие константы ;

K_KP0                 keypad 0
K_KP1                 keypad 1
K_KP2                 keypad 2
K_KP3                 keypad 3
K_KP4                 keypad 4
K_KP5                 keypad 5
K_KP6                 keypad 6
K_KP7                 keypad 7
K_KP8                 keypad 8
K_KP9                 keypad 9
K_KP_PERIOD   .       keypad period
K_KP_DIVIDE   /       keypad divide
K_KP_MULTIPLY *       keypad multiply
K_KP_MINUS    -       keypad minus
K_KP_PLUS     +       keypad plus
K_KP_ENTER    \r      keypad enter
K_KP_EQUALS   =       keypad equals

Вы бы использовали event.key >= 0x100 and event.key <= 0x109 для проверки K_KP0, K_KP1, ... K_KP9, потому что K_KP0 - это 256 в десятичном виде и 0x100 в шестнадцатеричном, K_KP9 - 265 в десятичном и 0x109 в шестнадцатеричном и т. д.

Кроме того, для удобства чтения было бы лучше использовать константы вместо шестнадцатеричных литералов.

Вот простой пример того, как проверить все номера клавиатуры или клавишу возврата клавиатуры:

import pygame

screen = pygame.display.set_mode((300, 300))

while True:
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            quit()
        if e.type == pygame.KEYDOWN:
            if pygame.K_KP0 <= e.key <= pygame.K_KP9:
                print('Numpad 0-9')
            if e.key == pygame.K_KP_ENTER:
                print('Numpad ENTER')

Ваш код

 if (event.key >= 0x100 and event.key <= 0x109 and event.key == pygame.K_RETURN):

не будет работать, поскольку event.key не может быть больше 256, меньше 265 и равно 13 одновременно (K_RETURN равно 13).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...