10

我现在正在修补 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 进程. 谁能发现我的代码有问题?

4

5 回答 5

13

如果您从 IDLE 运行它,那么您缺少pygame.quit()

这是由 IDLE python 解释器引起的,它似乎以某种方式保留了引用。确保在退出应用程序或游戏时调用 pygame.quit()。

请参阅:在 IDLE 中,为什么 Pygame 窗口不能正确关闭?

还有:Pygame 文档 - pygame.quit()

于 2010-01-08T11:09:00.313 回答
12

你在哪里退出外循环?

 while True: # outer loop
     for event in pygame.event.get(): # inner loop
         if event.type == QUIT:
            break # <- break inner loop
于 2010-01-08T11:22:04.247 回答
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()
于 2012-04-11T15:22:21.773 回答
3

'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()
于 2012-05-28T18:26:56.717 回答
0

我在知道为什么我不能关闭 pygame 窗口时遇到了类似的问题.. 并搜索了.. 并遇到了这个..

我认为这解释了一切..也是好主意..

如中所示:http ://bytes.com/topic/python/answers/802028-pygame-window-not-closing-tut-not-helping

我认为问题在于您是在 IDLE 中运行它。看起来 pyGame 的事件循环和 Tkinter 的事件循环相互干扰。如果您从命令行运行脚本,它可以工作。

于 2011-01-12T14:45:23.493 回答