Getting Pygame keyboard input and check if it's a number

Question:

I am trying to get keyboard input using Pygame using this command:

if event.type == pg.KEYDOWN:
    # ADD KEYBOARD EVENTS
    keys = pg.key.get_pressed()

I want to check if the button pressed represents a number, I already know how to check if a string represent a number using try/except command, but, in my code keys is not a string, it is a huge tuple – and I don’t know how to get it in an efficient way because every time I look in the internet on how to get keyboard input, they need to equate keys to something like pygame.pygame.K_LEFT and I don’t want to do this for each number and furthermore every number in the number-pad (right side).

Is there an efficient way to determine if a user clicked on a number? Thanks!

Asked By: MathAsker

||

Answers:

pygame.key.get_pressed() returns a list with the state of all keyboard buttons. This is not intended to get the key of a keyboard event. The key that was pressed can be obtained from the key attribute of the pygame.event.Event object:

if event.type == pg.KEYDOWN:
    if event.key == pg.K_a:
        # [...] 

unicode contains a single character string that is the fully translated character:

if event.type == pg.KEYDOWN:
    if event.unicode == 'a':
        # [...] 

See also pygame.key.

Answered By: Rabbid76

The following code offers quite a neat solution, it ignores all inputs that aren’t numbers without even using try/except:

if event.type == pg.KEYDOWN and event.unicode.isdigit():
    print(int(event.unicode))

I wasn’t able to find a way to do this that was more compact on the web, so worked out this solution by researching how to check if a string is an integer.

How can I check if a string represents an int, without using try/except?

Answered By: Jacob Grumley
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.