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