Pygame的Num Pad输入?

时间:2019-01-18 07:25:26

标签: python pygame

我在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 :(得分:1)

要检查是否按下了键盘的某个键时,可以使用以下constants;

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_KP0K_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({{1} K_RETURN

答案 1 :(得分:-1)

我认为最好的方法是创建由键盘常量组成的set并检查其中的成员资格。在Python中,包含在set中的成员资格测试非常快捷,,仅使用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...