Программы Pygame, висящие на выходе

Я сейчас занимаюсь pygame, и кажется, что все маленькие программы, которые я делаю с ним, зависают, когда я пытаюсь их закрыть.

Возьмите следующий код, например:

from pygame.locals import *
pygame.init()
# YEEAAH!
tile_file = "blue_tile.bmp"
SCREEN_SIZE = (640, 480)
SCREEN_DEPTH = 32

if __name__ == "__main__":
    screen = pygame.display.set_mode(SCREEN_SIZE, 0, SCREEN_DEPTH)
    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                break

    tile = pygame.image.load(tile_file).convert()
    colorkey = tile.get_at((0,0))
    tile.set_colorkey(colorkey, RLEACCEL)

    y = SCREEN_SIZE[1] / 2
    x = SCREEN_SIZE[0] / 2

    for _ in xrange(50):
        screen.blit(tile, (x,y))
        x -= 7
        y -= 14

Я не вижу ничего плохого в коде, он работает (игнорируйте тот факт, что плитка не расплывается в правильных местах), но нет трассировки и единственный способ ее закрыть - это убить процесс python в диспетчере задач. Может ли кто-нибудь обнаружить проблему с моим кодом?

Ответ 1

Если вы используете его из IDLE, вам не хватает pygame.quit().

Это вызвано интерпретатором IDLE python, который, похоже, каким-то образом поддерживает ссылки. Убедитесь, что вы вызываете pygame.quit() при выходе из приложения или игры.

Смотрите: В IDLE почему окно Pygame не закрывается правильно?

А также: Документация Pygame - pygame.quit()

Ответ 2

Где вы выходите из внешнего цикла?

 while True: # outer loop
     for event in pygame.event.get(): # inner loop
         if event.type == QUIT:
            break # <- break inner loop

Ответ 3

У меня была та же проблема, но я решил это сделать, выполнив следующие действия:

try:
   while True:
      for event in pygame.event.get():
         if event.type==QUIT or pygame.key.get_pressed()[K_ESCAPE]:
            pygame.quit()
            break
finally:
   pygame.quit()

Ответ 4

', если event.type == QUIT' генерирует синтаксическую ошибку. Должно быть == pygame.QUIT Кроме того, остальная часть строки неверна, но я не вижу, как это сделать. Там более чистый вариант здесь:

    running = True
    while running:
       for event in pygame.event.get():
           if event.type == pygame.QUIT:
           running = False
    pygame.quit()

Ответ 5

У меня была аналогичная проблема, зная, почему я не могу закрыть окна pygame.. и искал.. и наткнулся на это.

Я думаю, это все объясняет.. и хорошая идея тоже..

как показано в: http://bytes.com/topic/python/answers/802028-pygame-window-not-closing-tut-not-helping

Я думаю, проблема в том, что вы запускать его из IDLE. Это выглядит как цикл событий pyGame и Tkinter's цикл событий мешают друг другу. Если вы запускаете скрипты из командной строки, он работает.