我正在尝试使用 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()
最佳答案
您正在混合变量和函数名称。您不能命名变量 draw
,因为它会与内置的 pygame.draw...()
函数混淆,因为您已选择通过以下方式从 pygame 导入所有内容from pygame import *
,请参阅此答案的底部。
当你这样做时:
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
,在您的情况下:绘制
)
此外:您编写from pygame import *
。这意味着只需编写 draw.rect()
即可调用 Pygame.draw.rect()
函数,如果您执行 import pygame as pg
code> 并编写 pg.draw.rect()
您将能够避免类似的情况,并且还可以更好地跟踪您正在使用的函数。
关于python - Pygame 属性错误帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41202931/