【问题标题】:Attribute Error Help For PygamePygame的属性错误帮助
【发布时间】:2016-12-17 20:52:07
【问题描述】:

我正在尝试使用 pygame 制作一个绘画克隆,但我一直在修复这个错误。我是python的新手,所以请不要判断我可怕的代码XD错误消息是:

Traceback (most recent call last):
File "C:\Users\aggao\Desktop\Paint Project.py", line 32, in <module>
    draw.rect(screen,(0,255,0),pencilRect,2) 
AttributeError: 'pygame.Surface' object has no attribute 'rect'

.

from pygame import *
from random import *
from math import *
screen = display.set_mode((1280,720))
display.set_caption("Paint Program")
running = True
#graphics -------------------------------------------------
bg=image.load("background.jpg").convert_alpha()
logo=image.load("logo.png").convert_alpha()
draw=image.load("draw.png").convert_alpha()
fill=image.load("fill.png").convert_alpha()
text=image.load("txt.png").convert_alpha()
drawC=image.load("cir.png").convert_alpha()
drawR=image.load("rect.png").convert_alpha()
erase=image.load("eraser.png").convert_alpha()

bg=transform.scale(bg,(1280,720))

screen.blit(bg,(0,0))
screen.blit(logo,(0,0))
screen.blit(draw,(10,150))
screen.blit(fill,(210,150))
screen.blit(drawC,(10,300))
screen.blit(drawR,(210,300))
screen.blit(erase,(10,450))
screen.blit(text,(210,450))


hitD=Rect(10,150,150,150)

pencilRect = Rect(20,80,40,40)
draw.rect(screen,(0,255,0),pencilRect,2)
#gameloop -------------------------------------------------
while running:
    for evnt in event.get():
        if evnt.type == QUIT:
            running = False

    mx, my = mouse.get_pos()
    mb = mouse.get_pressed()

#Paint Brush -------------------------------------------------
    if hitD.collidepoint(mx,my) and mb[0]==1:
        print("I CHOOSE PAINTBRUSH!")


    display.flip()
quit()

【问题讨论】:

  • 您有问题,因为您使用了from pygame import *。如果你使用import pygame,那么你必须调用pygame.draw.rect(),你不会与变量draw = image.load(...)发生冲突

标签: python pygame


【解决方案1】:

您正在混合变量和函数名称。您不能命名变量draw,因为它会与内置的pygame.draw...() 函数混淆,因为您选择通过from pygame import * 从pygame 导入所有内容,请参阅此答案的底部。

当你这样做时:

draw=image.load("draw.png").convert_alpha()

然后:当你打电话时:

pencilRect = Rect(20,80,40,40)
draw.rect(screen,(0,255,0),pencilRect,2)

它认为你指的是你在image.load 行上导入的图像对象,而不是内置的pygame.draw.rect() 函数。如果你写:

any_other_name=image.load("draw.png").convert_alpha()

您的代码应该可以工作。在一般实践中,尽量不要混合使用变量和内置函数名称,即不要将函数名称用作变量(例如 list len 和您的情况:draw

除此之外:你写from pygame import *。这意味着只需编写 draw.rect() 就可以调用 Pygame.draw.rect() 函数如果您改为使用 import pygame as pg 并编写 pg.draw.rect() 您将能够避免这种情况,并且还可以更好地跟踪您正在使用的函数.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2014-01-06
    • 2018-12-14
    • 1970-01-01
    • 2018-06-11
    相关资源
    最近更新 更多