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

运行Pygame代码时出现'Event'对象无'key'属性错误求助

解决Pygame中AttributeError: 'Event' object has no attribute 'key'的问题

这个错误的根源是代码缩进错误,咱们一步步来理清楚:

在Pygame的事件循环里,只有KEYDOWN(或KEYUP)类型的事件才会带有key属性。但你的代码里,把判断K_s、K_a、K_d的逻辑放在了event.type == pygame.KEYDOWN的代码块外面——也就是说,当程序处理到非键盘事件(比如鼠标移动、窗口关闭之外的其他事件)时,会尝试访问这些事件的key属性,而这些事件根本没有这个属性,所以就抛出了错误。

修正后的代码

import pygame
import sys  # 导入sys模块用于优雅退出

pygame.init()
screen = pygame.display.set_mode((720, 480))
clock = pygame.time.Clock()
FPS = 60
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
rect = pygame.Rect((0, 0), (32, 32))
image = pygame.Surface((32, 32))
image.fill(WHITE)

while True:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()  # 用sys.exit()替代原quit(),退出更彻底
        elif event.type == pygame.KEYDOWN:
            # 所有判断key的逻辑都要缩进在KEYDOWN的代码块内
            if event.key == pygame.K_w:
                rect.move_ip(0, -2)
            elif event.key == pygame.K_s:
                rect.move_ip(0, 2)
            elif event.key == pygame.K_a:
                rect.move_ip(-2, 0)
            elif event.key == pygame.K_d:
                rect.move_ip(2, 0)
    screen.fill(BLACK)
    screen.blit(image, rect)
    pygame.display.update()

额外注意点

  • 处理键盘事件时,务必确保所有访问event.key的代码都在event.type == pygame.KEYDOWN(或KEYUP)的代码块内部,避免对非键盘事件做无效的属性访问。
  • 原代码中的quit()建议替换成pygame.quit() + sys.exit(),这样能正确关闭Pygame的所有资源并退出程序,避免潜在的资源泄漏问题。

内容的提问来源于stack exchange,提问作者aye decoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:34:28