You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame中按下Escape键无法关闭窗口是什么原因?

问题原因

你的代码存在3个核心错误,导致按Esc无法关闭窗口:

  • 未处理事件队列:Pygame的按键状态、窗口响应完全依赖内部事件队列的定期刷新,你的主循环是无任何事件处理的死循环,既不会更新按键检测的状态,还会被系统判定为无响应,所有用户输入都不会被程序正常接收。
  • 按键检测API误用:pygame.key.get_mods()的作用是检测Ctrl、Shift、Alt这类修饰键的按下状态,不能用来检测Esc这类普通按键,你用它的返回值和pygame.K_ESCAPE做位与运算,永远无法得到正确的按键判断结果。
  • 退出逻辑位置错误:你把判断x==2后执行pygame.quit()的代码写在了死循环的外面,代码永远执行不到这部分逻辑,就算x的值真的被修改为2,循环也不会终止,退出代码永远不会触发。
修复方案

直接替换为以下可正常运行的代码即可:

import pygame
import sys

# 初始化Pygame
pygame.init()
screen = pygame.display.set_mode((500, 500))
pygame.display.set_caption("hi")

running = True
# 主循环
while running:
    # 每帧必须处理事件队列,保证输入、窗口响应正常
    for event in pygame.event.get():
        # 响应窗口右上角关闭按钮
        if event.type == pygame.QUIT:
            running = False
        # 响应按键按下事件
        if event.type == pygame.KEYDOWN:
            # 检测是否按下Esc键
            if event.key == pygame.K_ESCAPE:
                running = False
    
    # 渲染逻辑区域(示例:填充黑色背景)
    screen.fill((0, 0, 0))
    pygame.display.update()

# 退出循环后释放Pygame资源,终止程序
pygame.quit()
sys.exit()

修复要点说明:

  • 主循环内必须每帧调用事件处理逻辑,推荐通过监听KEYDOWN事件判断按键按下,也可以用pygame.key.get_pressed()获取实时按键状态,不要用get_mods()检测普通功能键。
  • 退出状态的判断要放在主循环内部,满足退出条件时直接修改循环标记跳出循环,再统一执行资源释放、程序退出的逻辑,不要把退出代码写在死循环外部。
  • 处理完Pygame退出后,建议调用sys.exit()确保程序完全终止,避免残留进程。

内容的提问来源于stack exchange,提问作者not to good coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 13:27:18