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

使用Pygame开发计算器 循环绘制按钮遇AttributeError求助

Pygame计算器按钮绘制AttributeError问题解决

问题现象

使用Pygame开发计算器应用,尝试循环从numbers和symbols列表绘制按钮时,触发以下错误:

AttributeError: 'list' object has no attribute 'x'

核心代码片段:

screen = pygame.display.set_mode((width, height))
numbers = Buttons.numbers
symbols = Buttons.symbols
for i in symbols,numbers:
    Buttons.Button.drawButton(i,screen) #draw the buttons

Button类定义及按钮列表:

class Button:
    def __init__(self, x, y, symbol):
        self.x = x #坐标
        self.y = y
        self.symbol = symbol #+-/*
    def drawButton(self,screen):
        pygame.draw.rect(screen,white,(self.x,self.y,100,100))
        text = font_large.render(self.symbol,True,(0,0,0))
        screen.blit(text,(self.x+38,self.y+35))
# 按钮实例化及列表定义...
symbols = [s_dot,s_plus,...]
numbers = [num_0,num_1,...]

完整报错堆栈:

Traceback (most recent call last):
  File "C:\Users\hsvdg\PycharmProjects\calculator_app\main.py", line 23, in <module> 
    Buttons.Button.drawButton(i,screen)  
  File "C:\Users\hsvdg\PycharmProjects\calculator_app\Buttons.py", line 17, in drawButton  
    pygame.draw.rect(screen,white,(self.x,self.y,100,100))  
AttributeError: 'list' object has no attribute 'x'

错误原因

  1. 循环遍历对象错误:for i in symbols,numbers:会生成一个包含两个列表的元组,循环中每次的i是整个symbols或numbers列表,而非列表内的单个Button实例。
  2. 实例方法调用方式错误:直接通过Buttons.Button.drawButton(i,screen)调用实例方法时,第一个参数self会被绑定为传入的列表i,而列表没有x属性,因此触发报错。

修复方案

修正循环逻辑

合并symbols和numbers列表,遍历每个Button实例,然后调用实例自身的drawButton方法:

screen = pygame.display.set_mode((width, height))
numbers = Buttons.numbers
symbols = Buttons.symbols
# 遍历所有按钮实例
for btn in symbols + numbers:
    btn.drawButton(screen)  # 调用实例的drawButton方法

原理说明

  • symbols + numbers将两个列表合并为一个包含所有Button实例的新列表,循环时每次取到的是单个Button对象。
  • 调用btn.drawButton(screen)时,self会自动绑定为当前的Button实例,能正确访问self.x、self.y等属性。

可选优化

如果不想合并列表,也可以用嵌套循环遍历每个列表内的实例:

for btn_list in [symbols, numbers]:
    for btn in btn_list:
        btn.drawButton(screen)

内容的提问来源于stack exchange,提问作者T4 Vertix oli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:33:29