pygame.quit() 挂起,即使不在 IDLE 中

2 投票
4 回答
1872 浏览
提问于 2025-04-17 14:34

我在Debian上使用的是Pygame 1.9.1和Python 2.7.3。

我想先做一个简单的测试程序,然后再学习更复杂的东西;
在我告诉Pygame退出之前,一切都运行得很好。

我听说你需要在IDLE里面使用pygame.quit(),这样可以确保程序干净地退出,
所以我加上了这个,但它还是卡住了

相关的代码大概是这样的:

def mainLoop():                                                                                                                 
    running = True                                                                                                              
    clock = pygame.time.Clock()                                                                                                 
    while running:                                                                                                              
        gameMode()                                                                                                              
        render()                                                                                                                
        key = pygame.key.get_pressed()                                                                                          
        for event in pygame.event.get():                                                                                        
            if event.type == QUIT or key[K_ESCAPE]:                                                                             
                running = False                                                                                                 
                print 'finished'                                                                                                
                return                                                                                                          
        clock.tick(30)

if __name__=='__main__':                                                                                                        
    mainLoop()                                                                                                                  
    print 'exiting after main loop'                                                                                             
    pygame.quit()

我运行这个程序,它会打印出'finished'和'exiting after main loop',
但即便如此,窗口还是会停在那里。

更奇怪的是,
我把程序简化到最小的版本,结果还是卡住了(这就是它的全部):

import pygame
pygame.init()
pygame.quit()

有人能帮我解释一下这是怎么回事吗?

4 个回答

0

你是在IDLE里运行这个程序吗?我听说最好不要这样做,因为IDLE对pygame不太友好。

0

命令 pygame.quit() 其实就是关闭你打开的窗口。之后,代码会继续运行,直到遇到一个错误,那就是屏幕不存在了。如果你想真正停止程序,可以使用 sys.exit(),这样程序就会停止运行。

5

pygame.init 这个命令会尝试初始化所有的PyGame模块,不管你需不需要它们。而 pygame.quit 则会关闭所有正在运行的模块,当解释器退出时,它会自动被调用(这就是为什么当你去掉对 pygame.quit 的显式调用时,问题依然存在的原因)。

目前在Debian Wheezy系统上,pygame.mixer.quit 方法会出现卡住的情况(截至2013年6月12日)。如果你不使用音频混音器,可以把调用 pygame.init 的地方换成你正在使用的模块的 init 方法(需要调用 init 的模块列表可以在PyGame文档索引的“I”部分找到)。在我的情况下,只初始化 display 模块就足够了。所以,你的例子可以变成:

import pygame
pygame.display.init()
pygame.quit()

撰写回答