Jan:
Your player moves just once because you are listening for KEYDOWN events to move. KEYDOWN is only triggered when you first press a key. You can get the behavior you want in two ways.
Option 1: use pygame.key.get_pressed() to see the current state of the keys you want to check instead of examining events from the event queue.
Option 2: have the UserInterface remember what KEYDOWNs have occurred and clear them when a KEYUP occurs.
— Daniel