仅退出 Pygame 窗口

Posted

技术标签:

【中文标题】仅退出 Pygame 窗口【英文标题】:Exiting only Pygame window 【发布时间】:2014-02-09 22:21:04 【问题描述】:

我正在使用 GUI 运行 Pygame 窗口。例如,当用户单击 GUI 上的按钮时,会出现 Pygame 窗口。但是,当我想退出 Pygame 窗口时,我的 GUI 也会退出。我确定这是因为以下代码行:

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

sys.exit() 退出一切,这就是 IDE 关闭 Pygame 窗口的原因。但是我如何只关闭 Pygae 窗口?我试过这个:

for event in pygame.event.get():
            if event.type==pygame.QUIT:
                pygame.quit()
                break

但这不起作用。有什么建议吗?

使用 Pyqt4 和 Python 3 的图形用户界面。

【问题讨论】:

什么“不起作用”?有什么建议? 我的替代代码只关闭 Pygame 窗口而不是 pygame 窗口和 GUI 窗口 当然:但是在第二种情况下实际发生了什么? pygame 窗口是否关闭,既不关闭窗口,也关闭两个窗口,或者究竟是什么? 它关闭了,但在无休止地尝试单击 X 按钮之后。它不会像使用 sys.exit 那样顺利关闭,后者会关闭所有内容。 显示退出应用程序事件循环的代码 【参考方案1】:

我猜你的代码是 sn-p

for event in pygame.event.get():
    if event.type==pygame.QUIT:
        pygame.quit()
        break

是你的主循环的一部分,在while循环中运行,就像

while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            break

问题是break 将退出for 循环,而不是while 循环,最终导致异常,因为您退出 pygame 但可能正在尝试绘制屏幕等。

一个简单的解决方法是使用变量作为while 循环的条件,例如

quit = False
while not quit:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            quit = True
        ...

或确保退出 while 循环

while True:
    if pygame.event.get(pygame.QUIT): # only check for QUIT event
        break
    for event in pygame.event.get():
        ...

【讨论】:

以上是关于仅退出 Pygame 窗口的主要内容,如果未能解决你的问题,请参考以下文章

Pygame没有在按键时退出

NameError:没有为pygame定义名称“退出”

Pygame在一定时间后退出[重复]

有没有办法用 MOUSEBUTTONDOWN 事件关闭 pygame 窗口?

Pygame没有暂停更新屏幕[重复]

飞机大战