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

Pygame主循环按键检测报错:'Event' object has no attribute 'key' 求解

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

哦,这个坑我当初刚学Pygame的时候也踩过!咱们来拆解一下问题,然后快速搞定它:

错误原因

你遇到的这个报错,核心问题不是缩进,而是你直接对所有Pygame事件都访问了event.key属性——但实际上,只有键盘按键相关的事件(比如KEYDOWN、KEYUP)才有key这个属性!像窗口关闭事件(pygame.QUIT)、鼠标点击/移动事件这类,它们的事件对象里根本没有key,直接访问自然会抛出属性不存在的错误。

修复方法

解决思路很简单:先判断事件类型,确认是键盘事件后,再去访问event.key。

举个例子,你原来的代码可能是这样的:

for event in pygame.event.get():
    if event.key == pygame.K_p:
        # 你的按键处理逻辑

把它改成下面这样就可以了:

import pygame
import sys

# 初始化Pygame这些常规操作就不写了,你应该已经有了
pygame.init()

def mainting():
    while True:
        for event in pygame.event.get():
            # 先处理窗口关闭这类非键盘事件
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            
            # 只在检测到键盘按键按下事件时,才判断具体按键
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_p:
                    # 这里写你按下P键后要执行的逻辑,比如暂停游戏
                    print("P键被按下啦!")
        
        # 其他游戏循环逻辑...

if __name__ == "__main__":
    mainting()

额外注意点

  • 除了KEYDOWN,如果是检测按键抬起事件,要用event.type == pygame.KEYUP
  • 所有非键盘类事件(比如鼠标、窗口事件)都不要去碰event.key,一定要先做类型判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:26:12