簡體   English   中英

Pygame的屬性錯誤幫助

[英]Attribute Error Help For Pygame

我正在嘗試使用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.draw...() ,因為您已選擇通過from pygame import *所有內容,請參見此答案的底部。

當您這樣做時:

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

然后:當您隨后致電:

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

它認為您將draw稱為在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() ,則可以避免出現這種情況,並更好地跟蹤您正在使用的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM