pygame.quit()挂起,甚至在IDLE之外

时间:2013-02-02 22:44:39

标签: python pygame

我在Debian上使用Pygame 1.9.1和Python 2.7.3,

我试图让一个小的测试程序在我得到更高级之前工作;
事情似乎很好,直到我告诉Pygame退出。

我已经读过你需要pygame.quit(),至少在IDLE内部(为了确保它干净利落), 所以我有 - 但它仍然冻结

相关代码如下所示:

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

我运行它并打印出'完成'和'在主循环后退出',
但即便如此,窗户仍然存在。

更奇怪的是,
我已经把它减少到仍然挂起的最小程序(就是这个,完整的):

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

有人可以了解这里发生的事情吗?

4 个答案:

答案 0 :(得分:4)

pygame.init将尝试初始化所有PyGame的模块,无论是否需要。 pygame.quit将退出所有活动模块,并在解释器退出时自动调用(这就是为什么在删除对pygame.quit的显式调用时问题仍然存在的原因。)

pygame.mixer.quit方法目前挂在Debian Wheezy上(截至2013-06-12)。如果您没有使用调音台,只需调用pygame.init调用您正在使用的模块的init方法(需要init个调用的模块列表即可可以在PyGame documentation index中的“我”下找到。就我而言,初始化display模块就足够了。所以,你的例子变成了:

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

答案 1 :(得分:0)

命令pygame.quit()基本上只关闭你打开的窗口。然后代码将继续,直到出现错误,这将是屏幕不存在。如果您想要实际停止程序,请使用sys.exit(),程序将停止。

答案 2 :(得分:0)

你正试图在IDLE中运行该程序吗?我听说你不这么做,因为IDLE不喜欢pygame

答案 3 :(得分:0)

即使使用IDLE,我也做了两件事:

# other code ^
pygame.quit()
sys.exit()

这似乎有效