Pygame программы висят при выходе - PullRequest
10 голосов
/ 08 января 2010

Я сейчас работаю с 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 в диспетчере задач. Может кто-нибудь заметить проблему с моим кодом?

Ответы [ 5 ]

13 голосов
/ 08 января 2010

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

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

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

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

12 голосов
/ 08 января 2010

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

 while True: # outer loop
     for event in pygame.event.get(): # inner loop
         if event.type == QUIT:
            break # <- break inner loop
4 голосов
/ 11 апреля 2012

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

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()
3 голосов
/ 28 мая 2012

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

    running = True
    while running:
       for event in pygame.event.get():
           if event.type == pygame.QUIT:
           running = False
    pygame.quit()
0 голосов
/ 12 января 2011

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

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

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

Я думаю, проблема в том, что ты запустив его изнутри. Это выглядит как цикл событий PyGame и Tkinter Циклы событий мешают друг другу. Если вы запускаете сценарии из командная строка, это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...