Python 关闭Pygame窗口

Python 关闭Pygame窗口,python,pygame,Python,Pygame,我刚刚花了相当多的时间寻找pygame的64位安装,以便与Python3.3一起使用,(),现在我正在尝试制作一个窗口。然而,尽管窗口打开得很好,但当它按下x按钮时并没有关闭。事实上,我必须关闭闲置关闭窗口。我正在运行Win7的64位版本。这是我的密码: import pygame import time (width, height) = (300, 200) screen = pygame.display.set_mode((width, height)) pygame.display.fl

我刚刚花了相当多的时间寻找pygame的64位安装,以便与Python3.3一起使用,(),现在我正在尝试制作一个窗口。然而,尽管窗口打开得很好,但当它按下x按钮时并没有关闭。事实上,我必须关闭闲置关闭窗口。我正在运行Win7的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可能会进入其中一个循环,但即使解决了这个问题,我还是非常希望能够在需要时关闭窗口

不确定,但请尝试此操作,因为在我最后添加
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()
这可能是因为as Idle是在Tkinter上生成的,因此Tkinter和Pygame主循环没有相互理解。

不过,您的代码在命令提示符下运行得很好。

大多数pygame教程似乎建议通过调用
pygame.quit()
然后调用
sys.exit()
退出。我个人遇到了一些问题(虽然是在unix系统上),但仍然无法正确关闭窗口。解决方案是在
pygame.quit()之前添加
pygame.display.quit()
。据我所知,这是不必要的,恐怕我不知道为什么这解决了问题,但确实解决了。

尝试使用以下命令:

系统退出(0)


注意:您需要导入sys库才能使用它

如果要在按下窗口按钮x时关闭pygame,请输入如下代码:

from sys import exit
while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                exit()

我们将exit()放在pygame.quit()之后,因为pygame.quit()使系统退出,exit()关闭该窗口。

IDE会干扰pygame如何运行代码。尝试从命令行或终端运行它。问题应该消失。

要回答原始问题,必须在中断主循环后调用
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()

这是在OSX上为我工作的最后一段代码,同时在Jupyter上保持内核的活力。编辑-有时仍会使内核崩溃:-(

还需要降级ipython以消除一些magic alias警告消息,方法是:

conda install ipython=7.2.0

显然,这个问题应该在ipython 7.6.0中解决。在IDE(Spyder 3.3.6)中运行Python 3.7.4时,pygame.quit()不会完全关闭程序。 尽管如此,添加quit()或exit()还是帮了我的忙!

在顶部添加以下内容:

import sys
将此添加到需要退出的位置:

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

尝试从命令提示符下运行代码,看看问题是否存在?您使用的是什么pygame版本?@Alfgaar说实话,我不记得了。这是很久以前的事了:)except SystemExit可以工作,但它仍然空闲关闭。另外,当我打开命令提示符时,它返回错误“pygame.error:video system not initialized”。你知道如何解决这个问题吗?顺便说一句,谢谢你的帮助。我不明白为什么它要关闭空闲的(不是在我的情况下)。另外请注意,可能是您将代码
pygame.QUIT
替换为
pygame.QUIT()
pygame.quit()
是一个函数,它在
pygame.quit时关闭pygame(python仍在运行)。quit
只是检查pygame是否正在运行。我将
pygame.quit()函数放在While循环之后,以确保pygame在While循环之后没有运行。检查(
if else
语句)时不要使用它。pygame.init()初始化所有pygame模块(显示、混音器、字体等),pygame.quit()则相反,关闭所有模块。每个回合都可以初始化一个模块,如果您只想使用display,那么您可以执行pygame.display.init(),而不需要调用pygame.init。。。但是,根据你说的,pygame.quit在关闭显示模块时失败了……感谢上帝,终于有了一个有效的答案!我一直在到处寻找答案,这不仅仅是重复pygame文档方法。就个人而言,这消除了原本冻结的窗口,但进程仍然挂在pygame.quit()上。我只使用@Alfgaar的方法初始化了显示,然后删除了pygame.quit(),最终将其完全关闭。我在Spyder 4.1.3 IDE中尝试使用pygame 1.9.6时遇到了这个问题,但我的教程只有
if event.type==pygame.quit:sys.exit()
。我在
sys.exit()
之前的一行中添加了
pygame.quit()
,效果很好。@乔,这很奇怪——我的问题与你的问题完全一样(使用相同的Spyder版本和相同的pygame版本),但添加
pygame.quit()
对我来说并没有什么作用…@singularity,这就是我在pygame.event.get()中对event的作用:
如果event.type==pygame.QUIT:
pygame.QUIT()
sys.exit()
分为四行代码,我无法在注释中找到该怎么做。
if event.type == pygame.QUIT:
    pygame.quit()
    sys.exit()