Pygame построен на SDL2, в котором есть некоторые правила относительно того, в каких потоках могут вызываться определенные функции. Например, для функций в модуле событий ( "вы можете вызывать эту функцию только в потоке, который устанавливает режим видео." ).
Вы должны почти всегда избегайте использования потоков, если они не являются абсолютно необходимыми! Они делают вашу программу недетерминированной c, труднее отлаживать, труднее тестировать, труднее поддерживать и часто медленнее (если вы не используете их эффективно). В вашей программе нет причин использовать потоки. В вашем случае они не нужны. Вместо этого вы должны сделать это:
import pygame
import ctypes
class Game:
def __init__(self):
self.init = pygame.init()
self.screen = pygame.display.set_mode((800, 500))
self.runGame()
def runGame(self):
self.running = True
while self.running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
ctypes.windll.user32.MessageBoxW(0, 'Thank you for Playing!', 'Thank You', 0)
self.running = False
self.screen.fill((255, 255, 255))
pygame.draw.circle(self.screen, (0, 0, 255), (250, 250), 75)
pygame.display.flip() # Don't forget to call this to update the screen!
if __name__ == '__main__':
ins = Game()
Меньше кода, детерминировано c, и, скорее всего, быстрее и с меньшим объемом памяти.