Программы 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 цикл событий мешают друг другу. Если вы запускаете скрипты из командной строки, он работает.