2013-11-06 6 views
-1

Так, как я уже говорил перед моим кодом (или мой текущий проект, над которым я работаю) пронизан ошибками. Пока я, по крайней мере, решил десяток ошибок и более, и, честно говоря, я просто сдаюсь. Я имею в виду, что Бог знает, сколько еще есть.Как решить ошибку атрибута?

Текущая проблема, с которой я столкнулась, - это атрибут AttributeError, который, на мой взгляд, является одной из самых простых ошибок для исправления, однако я, похоже, пришел в режим спагетти, и я не знаю, как исправить проблему.

{Сама ошибка:

Traceback (most recent call last): 
     File "C:\Users\Burak\Desktop\boxtrial.py", line 87, in <module> 
     myScreen.addPane("1") 
     File "C:\Users\Burak\Desktop\boxtrial.py", line 67, in addPane 
     myPane.drawPane() 
     File "C:\Users\Burak\Desktop\boxtrial.py", line 19, in drawPane 
     self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115)) 
AttributeError: 'Pane' object has no attribute 'Screen' 

}

я перечислю ниже код, но я чувствую, как будто я должен объяснить, что я пытаюсь сделать так, у вас есть какое-то понимание код. В основном в основном цикле я вызываю «Экран класса», который помогает создать экран PyGame, который появляется после запуска. На этом экране я пытаюсь получить прямоугольники для отображения на экране в фиксированных положениях (координаты являются конкретными, но те, которые я использую в коде, предназначены только для тестирования). Тогда у меня есть другой класс, который называется «Панели», и этот класс существует, поэтому я могу рисовать много экземпляров панели классов внутри экрана (если это имеет смысл).

Если кто-то может помочь мне избавиться от ошибки, которая была бы решена, но если вы считаете, что это не лучший способ решить проблему, пожалуйста, будьте моим гостем, чтобы придумать или научить меня лучший способ сделать то же самое.

{Код:

import pygame 
import sys 
from pygame.locals import * 

white = (255,255,255) 
black = (0,0,0) 
objs = [] 
MAIN_BUTTON = 1 


class Pane(): 

    def __init__(self, textToDisplay, coordinates, screen): 
     self.textToDisplay = textToDisplay 
     self.coordinates = coordinates 
     self.screen = screen 

    def drawPane(self): 
     self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115)) 
     pygame.draw.rect(self.screen, (black), self.coordinates, 2) 
     pygame.display.update() 


class Screen(): 

    #constants/array(?) outlining the x,y boundaries of each of x10 panes 

    #Note to self - Remember to change co-ordinate values 
    NoOfPanes = 0 
    Panes = [] 

    def __init__(self): 
     pygame.init() 
     pygame.display.set_caption('Box Test') 

     self.font = pygame.font.SysFont('Arial', 25) 
     Screen = pygame.display.set_mode((1000,600), 0, 32) 
     self.screen = Screen 
     self.screen.fill((white)) 

     pygame.display.update() 

    def addPane(self, textToDisplay): 
     paneLocs = [(175, 75, 200, 100), 
        (0, 0, 200, 100), 
        (600, 400, 200, 100), 
        (175, 75, 200, 100), 
        (175, 75, 200, 100), 
        (175, 75, 200, 100), 
        (175, 75, 200, 100), 
        (175, 75, 200, 100), 
        (175, 75, 200, 100), 
        (175, 75, 200, 100) 
        ] 

     if self.NoOfPanes > 10: 
      print("Limit Reached")    
     else:    
      myPane = Pane(textToDisplay, paneLocs[self.NoOfPanes], Screen) 
      myPane.drawPane() 
      self.NoOfPanes = self.NoOfPanes + 1 
      pygame.display.update() 

    def mousePosition(self): 
     global clickPos 
     global releasePos 
     for event in pygame.event.get(): 
      if event.type == MAIN_BUTTON: 
       self.Pos = pygame.mouse.get_pos() 
       return MAIN_BUTTON 
      else: 
       return False 


if __name__ == '__main__': 
    myScreen = Screen() 
    myScreen.addPane("1") 
    myScreen.addPane("2") 
    myScreen.addPane("3") 
    myScreen.addPane("4") 

    while True: 
     ev = pygame.event.get() 
     for event in ev: 
      if event.type == pygame.MOUSEBUTTONUP: 
       posx,posy = pygame.mouse.get_pos() 
       if (posx >= 175 and posx <= 375) and (posy >= 75 and posy <= 175): 
        print("BOB") #Bob was there just for test purposes 

     for event in pygame.event.get():   
      if event.type == pygame.QUIT: 
       pygame.quit(); sys.exit(); 
+2

Вы переключение между '' self.Screen' и self.screen' –

+1

Кроме того, вы затенение класса 'Screen' с переменной' Screen' в вашем '' Screen' __init__' методе. Вы должны выбрать другое имя переменной или переключиться на нижний регистр. – SethMMorton

ответ

5

Fix ваш случай.

class Pane(): 

    def __init__(self, textToDisplay, coordinates, screen): 
     ... 
     self.screen = screen 

    def drawPane(self): 
     self.Screen.... # <<< HERE