В настоящее время я делаю что-то вроде класса / функции / потока сбора данных, который будет проверять список предопределенных привязок клавиш-> событий.
Примерно так:
class InputHandler:
def __init__ (self, eventDispatcher):
self.keys = {}
self.eventDispatcher = eventDispatcher
def add_key_binding (self, key, event):
self.keys.update((key, event,))
def gather_input (self):
for event in pygame.event.get():
if event.type == KEYDOWN:
event = self.keys.get(event.key, None)
if not event is None:
self.eventDispatcher.dispatch(event)
....
inputHandler = InputHandler(EventDispatcher)
inputHandler.add_key_binding(K_q, "quit_event")
...
inputHandler.gather_input()
....
Это в основном то, что делает superjoe30, за исключением того, что вместо прямого обратного вызова я добавляю другой уровень разделения с помощью системы диспетчеризации событий, чтобы любой код, который заботится о нажатых клавишах, просто прослушивал это событие.
Кроме того, ключи могут быть легко привязаны к различным событиям, которые могут быть прочитаны из файла конфигурации или чего-либо еще, и любой ключ, который не связан с событием, просто игнорируется.