I've found two related questions: Pygame hold key down causes an infinite loop pygame - on hold button down But I want to be specific. How can I do it? while not done: for e in event.get(): if e.type == KEYDOWN: keys = key.get_pressed() if e.type == QUIT or keys[K_ESCAPE]: done = True if keys[K_DOWN]: print "DOWN" When I press the down arrow, it prints, but it prints just once. If I want to print it another time, I need to press it again. If I use the while keyword instead, while keys[K_DOWN]: print "DOWN" I get an infinite loop for some obscure reason. This logical alternative is also useless: if ((e.type == KEYDOWN) and keys[K_DOWN]): print "DOWN" And there is this other one that somehow cleans the events and you can use while: while not done: for e in event.get(): if e.type == KEYDOWN: keys = key.get_pressed() if e.type == QUIT or keys[K_ESCAPE]: done = True while keys[K_DOWN]: print "DOWN" event.get() keys = key.get_pressed() But you press the down key for less than one second and it prints thousands of times. (Moving a player would be impossible, and adjusting clock for this does not seem to be the right way to deal with it (And I've tried and I've failed miserably.).) To press and execute the block thousands of times is useless. What I want, is to press the key and keep going with the action while I don't release it, within the defined game clock speed. Continue reading...