我花了相当多的时间找到一个64位的pygame安装用于python 3.3,(here),现在我正试图创建一个窗口。但是,虽然窗口打开很好,但是当它按下x按钮时它不会关闭。事实上,我必须关闭IDLE来关闭窗口。我正在运行Win 7的64位版本。这是我的代码:
import pygame
import time
(width, height) = (300, 200)
screen = pygame.display.set_mode((width, height))
pygame.display.flip()
pygame.display.set_caption("Hello World")
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
当我追加
time.sleep(5)
pygame.quit()
它仍然没有关闭。我唯一的猜测是pygame.quit可能会进入其中一个循环,但即使已经解决了,我也非常希望能够在我想要的时候关闭窗口。
答案 0 :(得分:16)
大多数pygame教程似乎建议通过调用pygame.quit()
然后调用sys.exit()
来退出。我个人遇到了问题(虽然在unix系统上),但仍未正确关闭窗口。解决方案是在pygame.display.quit()
之前专门添加pygame.quit()
。据我所知,这不应该是必要的,我担心我不知道为什么解决了这个问题,但确实如此。
答案 1 :(得分:4)
不确定但是试试这个因为我在最后添加pygame.quit()
后我的系统上的代码运行正常
import pygame
import time
(width, height) = (300, 200)
screen = pygame.display.set_mode((width, height))
pygame.display.flip()
pygame.display.set_caption("Hello World")
running = True
try:
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
except SystemExit:
pygame.quit()
也许是因为Idle是在Tkinter上进行的,因此Tkinter和Pygame主循环没有相互理解。
您的代码在命令提示符下运行得非常好。
答案 2 :(得分:4)
如果想让窗口按钮按下pygame关闭x按下这样的代码
from sys import exit
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
为什么在pygame.quit()之后放入exit()导致pygame.quit()使系统退出并退出()以关闭该窗口
答案 3 :(得分:1)
在IDE(Spyder 3.3.6)中运行Python 3.7.4时遇到相同的问题。在我的情况下,pygame.quit()不会完全关闭程序。 尽管如此,添加quit()或exit()还是对我有用!
答案 4 :(得分:1)
在顶部添加:
import sys
在需要退出的地方添加:
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
答案 5 :(得分:0)
尝试使用以下命令:
sys.exit(0)
注意:您需要导入sys库才能使用它。
答案 6 :(得分:0)
IDE会干扰pygame如何运行代码。尝试从命令行或终端运行它。问题应该消失。
答案 7 :(得分:0)
这是在OSX上对我有用的最终代码,同时使内核在Jupyter上仍然有效。编辑-有时它确实仍然会使内核崩溃:-(
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.display.quit()
pygame.quit()
exit()
还需要使用以下命令降级ipython来摆脱一些魔术别名警告消息:
conda install ipython=7.2.0
显然,该问题将在ipython 7.6.0中得到解决
答案 8 :(得分:-1)
要回答原始问题:您必须在中断主循环后调用pygame.quit()
。一种优雅的解决方案如下:
def run():
pygame.init()
while True:
# ...
for event in pygame.event.get():
# Handle other events
if event.type == pygame.QUIT:
return pygame.quit()