运行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
相关产品推荐
相关产品推荐

