关闭Pygame窗口

时间:2013-11-09 20:02:00

标签: python pygame

我花了相当多的时间找到一个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可能会进入其中一个循环,但即使已经解决了,我也非常希望能够在我想要的时候关闭窗口。

9 个答案:

答案 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()