简体   繁体   中英

How do I solve an attribute error?

So like I said before my code (Or my current project that I am working on) is riddled with errors. So far I have at least solved a dozen errors or more and honestly I just give up. I mean God knows how many more there are.

The current problem that I am having is an AttributeError which is in my opinion one of the easiest errors to fix however I seem to have gone in to complete spaghetti mode and I have no clue on how to fix the problem.

{The error itself:

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'

}

I will list the code below but I feel as if I should explain what I am trying to do so you have some sort of understanding of the code. Basically in the main loop I call upon the "Class Screen" which helps to create a PyGame screen that comes up once run. On that screen I am trying to get rectangles to appear on the screen in fixed positions (The coordinates are specific but the ones I use on the code are just for test purposes). I then have another class that is called "Pane" and this class is there so that I can draw many instances of the class pane within screen (If that makes sense).

If someone can help me get rid of the error that would be of grate help, but if you think that this is not a good way of solving the problem then please be my guest to come up with or teach me of a better way to do the same thing.

{The code:

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();

Fix your case.

class Pane():

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM