Python 3 Pygame程序不会退出

时间:2017-03-03 06:42:31

标签: python python-3.x pygame

当pygame窗口关闭时,我想立即停止执行;这是该计划的结束。我上下互联网,我遇到的每一个问题都是“你试过pygame.quit()”还是“你永远不会打破你的无限循环”。那不是我的问题。这是我的代码:

#!/usr/bin/env python3

import pygame
from sys import exit as sysExit

pygame.init()
screen = pygame.display.set_mode((512,512))
screen.fill((255,255,255))

pygame.display.update()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.display.update()
            pygame.display.quit()
            pygame.quit()
            exit(0)
            sysExit(0)
            #None of these work, code under them is unreachable but the process hangs

正如评论和问题标题所说,这个过程会挂起。老实说,我不知道我能做些什么来告诉python我已经完成了,我已经尝试了这些退出函数的所有组合,但没有任何作用。窗口将关闭,但程序永远不会结束。在我的搜索中,我发现人们对“IDLE”这个我没有的东西有问题。

这是我做的(我的系统):Linux Mint Cinnamon 18,32位(i686),使用python版本3.5.2(没有IDE,只是从终端运行)

编辑 - 显然当我说程序“挂起”时,我正在谈论的内容存在一些混淆,所以这里有一些问题的截图。第一个显示上述代码实际上可用于重现问题。 Program 现在我所做的只是运行这个脚本,它只是给了我一个像你期望的空白窗口。 What happens when I run program 现在我点击窗口上的“x”按钮,窗口消失,但我的终端就像这样。屏幕截图不会显示闪烁的光标,但您会注意到没有新的提示。 What happens when the program is done running 到目前为止,我一直在努力让这件事停下来: How I have to stop program 把它扔在后台,强制杀死工作(SIGTERM被忽略btw)并再次前景,现在我有一个提示。

2 个答案:

答案 0 :(得分:1)

检查pygame.init() - > (numpass,numfails),然后手动加载每个模块(是的,每个模块都有一个init()和quit()方法)。我怀疑混合或音乐模块是问题(由于操作系统/驱动程序/硬件问题)。

答案 1 :(得分:0)

pygame irc频道帮我解决了这个问题。具体来说,这个答案来自用户DR0ID_,他引导我完成了我应该首先想到的一些调试。

首先,一旦我完成了这个答案,我就会编辑这个问题,但我不得不为最初留下的东西道歉:我在Virtualbox VM上做了这一切。通过遍历由def check_admin(user): return user.is_superuser @user_passes_test(check_admin) def my_view(request): ... 初始化的不同模块,我发现实际挂起的模块是pygame.init()。还没有来自pygame开发者的消息,但工作原理是这与Virtualbox声音驱动程序和/或它们与主机驱动程序的接口有关。基本上,如果您使用虚拟机并且不需要播放声音,则解决方法是仅初始化您需要的模块。因为在我的例子中我只需要pygame.mixer,解决方案很简单:

pygame.display