Python 中出现AttributeError: ‘Event‘ object has no attribute ‘key‘

这篇具有很好参考价值的文章主要介绍了Python 中出现AttributeError: ‘Event‘ object has no attribute ‘key‘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

《python编程从入门到实践》中在学习外星人入侵项目中运行程序时出现报错 AttributeError: 'Event' object has no attribute 'key'

错误代码如下:

# coding = utf-8

import sys
import pygame
from settings import Settings
from ship import Ship

class AlienInvasion:
    """管理游戏资源与行为的类"""

    def __init__(self):
        """初始化游戏并创建游戏资源"""
        pygame.init()
        self.settings = Settings()
        self.screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
        self.settings.screen_width = self.screen.get_rect().width
        self.settings.screen_height = self.screen.get_rect().height
        pygame.display.set_caption("Alien Invasion")

        self.ship = Ship(self)

    def run_game(self):
        """开始游戏的主循环"""
        while True:
            self._check_events()
            self.ship.update()
            self._update_screen()

    def _check_events(self):
        """响应按键和鼠标事件"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:  
                self._check_keydown_events(event)
            elif event.type == pygame.KEYUP:
                self._check_keyup_events(event)‘

            #按Q键退出游戏
            elif event.key == pygame.K_q:
                sys.exit()

    def _check_keydown_events(self,event):
        """响应按键"""
        if event.key == pygame.K_RIGHT:
            self.ship.moving_right = True
        elif event.key == pygame.K_LEFT:
            self.ship.moving_left = True

    def _check_keyup_events(self,event):
        """响应松开"""
        if event.key == pygame.K_RIGHT:
            self.ship.moving_right = False
        elif event.key == pygame.K_LEFT:
            self.ship.moving_left = False
    
    def _update_screen(self):
        """更新屏幕上的图像,并切换到新屏幕"""
        self.screen.fill(self.settings.bg_color)
        self.ship.blitme()

        pygame.display.flip()

if __name__ == "__main__":
    #创建游戏实例并运行游戏
    ai = AlienInvasion()
    ai.run_game()

运行错误提示

C:\Users\鱼语雨\Desktop\python\python\alien_invasion>python alien_invasion.py
pygame 2.1.2 (SDL 2.0.18, Python 3.10.2)
Hello from the pygame community. https://www.pygame.org/contribute.html
Traceback (most recent call last):
  File "C:\Users\鱼语雨\Desktop\python\python\alien_invasion\alien_invasion.py", line 69, in <module>
    ai.run_game()
  File "C:\Users\鱼语雨\Desktop\python\python\alien_invasion\alien_invasion.py", line 25, in run_game
    self._check_events()
  File "C:\Users\鱼语雨\Desktop\python\python\alien_invasion\alien_invasion.py", line 39, in _check_events
    elif event.key == pygame.K_q:
AttributeError: 'Event' object has no attribute 'key'

导致错误的原因为“ #按Q键退出游戏”这部分程序中“elif event.key == pygame.K_q:”这句语句写在了与 事件类型 “event.type == pygame.KEYDOWN:” 并列的位置上。

“KEYDOWN”和“KEYUP”作为 键盘事件,其提供了一个成员属性key,通过该属性来获取本次键盘事件的内容,及按下了那个按键,所以“event.key”不能与“event.type”处于并列位置。

使用pygame处理事件时,逻辑一般是先判断事件类型,然后在根据不同的事件操作,执行不同的游戏操作,及先判断事件类型,再判断事件内容。

正确代码如下:文章来源地址https://www.toymoban.com/news/detail-503653.html

# coding = utf-8

import sys
import pygame
from settings import Settings
from ship import Ship

class AlienInvasion:
    """管理游戏资源与行为的类"""

    def __init__(self):
        """初始化游戏并创建游戏资源"""
        pygame.init()
        self.settings = Settings()
        self.screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
        self.settings.screen_width = self.screen.get_rect().width
        self.settings.screen_height = self.screen.get_rect().height
        pygame.display.set_caption("Alien Invasion")

        self.ship = Ship(self)

    def run_game(self):
        """开始游戏的主循环"""
        while True:
            self._check_events()
            self.ship.update()
            self._update_screen()

    def _check_events(self):
        """响应按键和鼠标事件"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:  
                self._check_keydown_events(event)
            elif event.type == pygame.KEYUP:
                self._check_keyup_events(event)

    def _check_keydown_events(self,event):
        """响应按键"""
        if event.key == pygame.K_RIGHT:
            self.ship.moving_right = True
        elif event.key == pygame.K_LEFT:
            self.ship.moving_left = True
        #按Q键退出游戏
        elif event.key == pygame.K_q:
            sys.exit()

    def _check_keyup_events(self,event):
        """响应松开"""
        if event.key == pygame.K_RIGHT:
            self.ship.moving_right = False
        elif event.key == pygame.K_LEFT:
            self.ship.moving_left = False
    
    def _update_screen(self):
        """更新屏幕上的图像,并切换到新屏幕"""
        self.screen.fill(self.settings.bg_color)
        self.ship.blitme()

        pygame.display.flip()

if __name__ == "__main__":
    #创建游戏实例并运行游戏
    ai = AlienInvasion()
    ai.run_game()

到了这里,关于Python 中出现AttributeError: ‘Event‘ object has no attribute ‘key‘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python: AttributeError: ‘tuple‘ object has no attribute ‘xx‘

    在使用argparse模块创建一个包含命令行中所有参数的对象,后续调用时出现这个错误。  原始代码如下: 在Pycharm中执行这个命令时,报错: 但这个错误很奇怪,如果是在Anaconda的spyder中执行的话是没有报错的。 如果想要在Pycharm中执行此命令,需要把parser.parse_args()改成parse

    2024年02月05日
    浏览(46)
  • Python AttributeError: ‘NoneType‘ object has no attribute ‘shape‘

       运行出现上述错误,这个错误表示某个图像对象为 NoneType ,没有 \\\'shape\\\' 属性。通常情况下,这是因为 OpenCV 没有能够正确地加载图像,导致无法访问图像数据。 可以尝试以下步骤来解决这个错误: 1. 检查图像路径是否设置正确:检查输入的图像路径是否正确,并确保路径

    2024年02月15日
    浏览(44)
  • Python报错:AttributeError: ‘ImageDraw‘ object has no attribute ‘textbbox‘

    报错原因是pillow的版本过低,导致不能使用 解决方法: 打开Anaconda prompt查看下载列表 删除原有的pillow:  从新下载pillow: 如果上面的命令报错下载不成功尝试下面的代码:(从清华镜像下载pillow) 其他下载镜像: 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirror

    2024年02月06日
    浏览(52)
  • Python 中 AttributeError: ‘NoneType‘ object has no attribute ‘X‘ 错误

    Python “ AttributeError: ‘NoneType’ object has no attribute ” 发生在我们尝试访问 None 值的属性时,例如 来自不返回任何内容的函数的赋值。 要解决该错误,请在访问属性之前更正分配。 这是一个非常简单的示例,说明错误是如何发生的。 尝试访问或设置 None 值的属性会导致错误

    2024年02月06日
    浏览(39)
  • 【python|OpenCV】AttributeError: ‘NoneType‘ object has no attribute ‘shape‘

    当使用OpenCV出现这个错误时,但是又没有中文路径或者路径的错误时,可能是版本没有对上,或者是其他的问题,我也用过很多博主的办法,但是都没办法解决的时候,真的可以试一下 直接删除,再重新下载。 目录 情况描述 我的做法 感想 留言 本来我使用的是版本是4.7.0,

    2024年02月03日
    浏览(34)
  • 【Python】成功解决AttributeError: ‘list‘ object has no attribute ‘replace‘

    【Python】成功解决AttributeError: ‘list’ object has no attribute ‘replace’ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分92+),分享更多

    2024年03月25日
    浏览(42)
  • 【Python】成功解决AttributeError: ‘list‘ object has no attribute ‘split‘

    【Python】成功解决AttributeError: ‘list‘ object has no attribute ‘split‘ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分92+),分享更多关

    2024年04月14日
    浏览(54)
  • 将图结构转换矩阵数据转换为PyTorch支持的张量类型时,出现错误AttributeError ‘Tensor‘ object has no attribute ‘todense‘

    将图结构转换矩阵数据转换为PyTorch支持的张量类型时,出现错误AttributeError: ‘Tensor’ object has no attribute ‘todense’ 实例来源于《PyTorch深度学习和图神经网络 卷1》实例26:用图卷积神经网络为论文分类 出错部分p284页 原代码: 错误提示: ​ 找了一圈没有一样的解决方案,但

    2024年02月13日
    浏览(45)
  • AttributeError: ‘DataFrame‘ object has no attribute ‘iteritems‘解决方案【Bug已解决-Python】

    本文主要介绍了AttributeError: ‘DataFrame‘ object has no attribute ‘iteritems‘解决方案,希望能对大家有所帮助。 今天在运行项目时,却出现AttributeError: ‘DataFrame‘ object has no attribute ‘iteritems‘的错误提示,具体报错信息如下所示: AttributeError: ‘DataFrame‘ object has no attribute ‘i

    2024年03月23日
    浏览(73)
  • Python产生关键词云报错:AttributeError: ‘ImageDraw‘ object has no attribute ‘textbbox‘

    利用jieba snownlp分别分词,产生云。代码报错,检查了以下代码没错。 最后在csdn找到了解决方法。 这原来是pillow的版本过低的原因。 办法如下: 打开Anaconda prompt查看下载列表: pip  list   删除现有的pillow:  pip uninstall pillow  下载新版本的pillow: pip install pillow 推荐用

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包