我在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):
....
有人可以帮忙吗?
答案 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_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
({{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...