Quick answer: Compare event.key == pygame.K_LEFT. event.unicode is empty for non-printable.
Arrow key UI navigation. event.unicode check returns empty. KEYDOWN fires; you're reading the wrong attribute.
The Fix
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
move_left()
elif event.key == pygame.K_RIGHT:
move_right()
elif event.unicode == "a":
# printable only
type_a()
event.key for keycodes (printable + special). event.unicode for printable text input. Don’t mix.
Verifying
Arrow keys move; printable keys type. Both work in same loop.
“event.key for codes. event.unicode for text.”
Related Issues
For event loop lag, see event lag. For mousewheel, see mousewheel.
event.key. Arrows fire.