How to use pygame.KEYDOWN to execute something every time through a loop while the key is held down?

I made 2 functions, which would check for an event

def get_pygame_events():
  pygame_events = pygame.event.get()
  return pygame_events

and

def get_keys_pressed(self):
  keys_pressed = get_pygame_events()  #pygame.event.get(pygame.KEYDOWN)
  # print(keys_pressed)
  keys_pressed_list = []
  for event in keys_pressed:
    if event.type == pygame.KEYDOWN:
      if event.key == K_LEFT:
        keys_pressed_list.append("left")
      if event.key == K_RIGHT:
        keys_pressed_list.append("right")
      if event.key == K_UP:
        keys_pressed_list.append("up")
      if event.key == K_DOWN:
        keys_pressed_list.append("down")
      if event.key == K_a:
        keys_pressed_list.append("a")
      if  event.key == K_d:
        keys_pressed_list.append("b")
      if event.key == K_w:
        keys_pressed_list.append("w")
      if event.key == K_s:
        keys_pressed_list.append("s")
      if event.key == K_SPACE:
        keys_pressed_list.append("space")
      if event.key == K_q:
        keys_pressed_list.append("q")
      if event.key == K_e:
        keys_pressed_list.append("e")
    if event.type == pygame.MOUSEBUTTONDOWN:
      keys_pressed_list.append("click")
      return (keys_pressed_list, event.pos)
  return keys_pressed_list

I expected that if I could do something similar to:

while True:
  Variable1 = get_pygame_events()
  Variable2 = get_keys_pressed()
  if Variable2 == ["w"]:
    print("w")

(That while loop was just a summary of what I did)

Then if I held down W, "w" would be printed over and over and over again. Instead when I tried, it printed W once, and unless I pressed again, that is all that would happen.

How can I make it so by holding down the W (or any) key, it identifies the event happening, and (in this case) prints "w" every time it goes through the while loop?


Use pygame.KEYDOWN and pygame.KEYUP to detect if a key is physically pressed down or released. You can activate keyboard repeat by using pygame.key.set_repeat to generate multiple pygame.KEYDOWN events when a key is held down, but that's rarely a good idea.

Instead, you can use pygame.key.get_pressed() to check if a key is currently held down:

while True:
    ...
    pressed = pygame.key.get_pressed()
    if pressed[pygame.K_w]:
       print("w is pressed")
    if pressed[pygame.K_s]:
       print("s is pressed")

event.key == chr('a') 

event.key returns the ascii of the key