Python pygame在音乐播放期间冻结

时间:2015-11-04 16:56:23

标签: python pygame

您好我正在构建一个简单的MP3播放器。我现在拥有它,所以当我启用该功能时,它播放声音很好,但gui在等待声音文件完成时暂时冻结。我希望能够在播放文件时点击停止,退出等。有什么建议吗?

def Play():
    soundfile = 'test.wav'
    pygame.mixer.music.load(soundfile)
    pygame.mixer.music.play(0)
    events = pygame.event.get()
    while pygame.mixer.music.get_busy():

        for event in events:

            if event.type == pygame.QUIT:
                sys.exit()

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.Q:
                    sys.exit()
            elif event.type == pygame.MOUSEMOTION:
                 print "mouse at (%d, %d)" % event.pos

1 个答案:

答案 0 :(得分:0)

当没有调用pygame.event.get()时,游戏窗口将冻结。由于您在while循环之外调用pygame.event.get(),因此窗口事件队列只会被刷新一次。简单的解决方案是直接用pygame.event.get()直接替换event变量,以便在get_busy()返回true时连续调用它。

通常对于这些情况,更好的解决方案是进行一些重构,你可以在程序中集中调用pygame.event.get(),而不是调用一个名为Play()的函数来处理事件队列,你改为使用一个名为handlePlayForOneFrame(list_of_relevant_events_this_frame)的函数。