Pygame не является потокобезопасным, и EventLoop требуется для запуска в главном потоке! В противном случае проблема, которую вы описываете, может возникнуть.
Одним из решений является вызов pygame.mainloop()
из основного потока.
Однако, возможно, вы используете другие модули, которые также требуют запуска из основного потока. В этом случае есть одно питоническое решение. у вас есть возможность запустить Pygame Mainloop с аргументом. Этот аргумент означает: запустить mainloop всего за несколько секунд. Следовательно, вы можете создать генератор, который запускает mainloop в течение 0,1 секунды, который вы периодически вызываете из основного потока. Например:
def continue_pygame_loop():
pygame.mainloop(0.1)
yield
, тогда просто периодически звоните continue_pygame_loop()
из основного потока
Tkinter страдает от той же проблемы, но не может указать runloop()
с таймаутом. Для меня вот почему Pygame великолепен!