2016-12-17 1 views
1

Я пытаюсь сделать клонирование краски, используя pygame, но я застрял в исправлении этой ошибки. Я очень новичок в Python так пожалуйста, не судите мой ужасный код XD Сообщение об ошибке:Ошибка справки атрибута для Pygame

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() 
+0

У вас проблема, потому что вы используете 'from pygame import *'. Если вы используете 'import pygame', тогда вам нужно вызвать' pygame.draw.rect() ', и у вас не будет конфликта с переменной' draw = image.load (...) ' – furas

ответ

3

Вы смешиваете имена переменных и функций. Вы не можете назвать переменную 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() 

Ваш код должен работать. В общей практике, старайтесь не смешивать переменные и встроенные имена функций, то есть не использовать имена функций, как переменные (такие вещи, как listlen и в вашем случае: draw)

В дополнение к этому: вы пишете from pygame import *. Это означает, что функцию Pygame.draw.rect() можно вызвать только путем записи draw.rect() Если вы вместо этого сделаете import pygame as pg и напишите pg.draw.rect(), вы сможете избежать подобных ситуаций, а также лучше отслеживать, какие функции вы используете.

+0

@ZackLiu Это решило вашу проблему? – Chuck

Смежные вопросы