Is there a way to find any number that has been pressed on "pygame"? and how display it?

Viewed 38

I'm trying to ask the user the length of the code they would like to crack from 1 - 7 I also need to account for those using Numpad. Anyway, I know the code for everything except how to detect the number they have pressed.

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_2 or event.key == pygame.K_3 or event.key == pygame.K_4 or event.key == pygame.K_5 or event.key == pygame.K_6 or event.key == pygame.K_7:
        print(int(event.key)-48)
    elif event.key == pygame.K_KP_2 or event.key == pygame.K_KP_3 or event.key == pygame.K_KP_4 or event.key == pygame.K_KP_5 or event.key == pygame.K_KP_6 or event.key == pygame.K_KP_7:
        print(int(event.key)-1073741912)

This is just too clunky and even before writing this code, I thought it would be ugly to do it this way.

3 Answers

A user friendly name of a key can be get with pygame.key.name():

for event in pygame.event.get():
    if event.type == pygame.KEYDOWN:
        print(pygame.key.name(event.key))

e.g.:

print(pygame.key.name(pygame.K_5))
print(pygame.key.name(pygame.K_KP_5))

output:

5
[5]

In addition to Rabbid76's response, here is an explicit answer:

if event.type == pygame.KEYDOWN:
    if pygame.key.name(event.key) in ["2", "3", "4", "5", "6", "7"]:
        print(pygame.key.name(event.key))
    elif pygame.key.name(event.key) in ["[2]", "[3]", "[4]", "[5]", "[6]", "[7]"]:
        print(pygame.key.name(event.key))

Pygame keys are just subsequent int constants, so you can use a range() like this:

if event.key in range(pygame.K_2, pygame.K_7 + 1):
    print(int(event.key) - pygame.K_0)
elif event.key in range(pygame.K_KP_2, pygame.K_KP_7 + 1):
    print(int(event.key) - pygame.K_KP_0)
Related