Pygame程序在退出时挂起

10 投票
5 回答
7537 浏览
提问于 2025-04-15 17:47

我现在正在玩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 个回答

4

我也遇到过同样的问题,不过我通过以下方法解决了它:

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()
12

你在哪里结束外层循环?

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

如果你是在IDLE里运行程序,那你可能忘了加pygame.quit()这行代码。

这是因为IDLE这个Python解释器似乎会保留一些引用。确保在退出你的应用程序或游戏时调用pygame.quit()。

可以参考这个链接:在IDLE中,为什么Pygame窗口不能正确关闭?

还有这个链接:Pygame文档 - pygame.quit()

撰写回答