pygame.quit() 挂起,即使在 IDLE 之外

BJY*_*ley 2 python pygame

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

在我变得更高级之前,我正在尝试让一个小型测试程序正常工作;
事情似乎进展顺利,直到我告诉 Pygame 退出。

我读到你需要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()
Run Code Online (Sandbox Code Playgroud)

我运行它,它打印出“完成”和“主循环后退出”,
但即使这样,窗口仍然存在,挂起。

更奇怪的是,
我已将其削减为一个仍然挂起的最小程序(就是这个,完整的):

import pygame
pygame.init()
pygame.quit()
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下这里发生的事情吗?

Har*_*tts 5

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

pygame.mixer.quit方法目前挂在 Debian Wheezy 上(截至 2013 年 6 月 12 日)。如果您不使用混合器,则只需将调用替换为pygame.init对您正在使用的模块的方法的调用init(需要调用的模块列表可以在PyGame 文档索引init中的“I”下找到)。就我而言,初始化模块就足够了。所以,你的例子就变成了:display

import pygame
pygame.display.init()
pygame.quit()
Run Code Online (Sandbox Code Playgroud)