AttributeError: ” object heeft geen attribuut ”

Ik heb een probleem, ik werkte aan een code met python 3. de code gaat over het krijgen van nieuws over een website op mijn canvas. ik krijg echter steeds deze foutmelding die zegt:

AttributeError: ‘NewsFeed’-object heeft geen attribuut ‘canvas’.

dit is mijn code:

from tkinter import *
import feedparser
root=Tk()
class Achtergrond() :
    m_Width = 0
    m_Height = 0
    m_BgColor = 0
    def CreateCanvas(self, master, width, height) :
        m_Width = width
        m_Height = height
        m_BgColor='#14B4E1'
        self.canvas = Canvas(master, width=m_Width, height=m_Height)
        self.canvas.configure(bg=m_BgColor)
        self.canvas.pack()
        return(self.canvas)
    def create_rectangle(x0, y0 ,x1,y1, color) :
        self.canvas.create_rectangle(x0, y0, x1, y1, fill=color)
        return
    def create_title (self, x, y, title, opmaak):
        self.canvas.create_text(x,y,text=title, font= opmaak)
        return
    def create_newsbox(master,x0,y0,x1,y1,color):
        canvas.create_rectangle(x0,y0,x1,y1, fill=color)
        return 
    def SetBackgroundColor(self, kleurcode) :
        m_BgColor = kleurcode
        self.canvas.configure(bg=m_BgCode)
        self.canvas.pack()
        return
class NewsFeed ():
    Hitem = 0
    Nitem = 0
    feed = 0
    th = 0
    rssURL = ""
    def UpdateNews(self,path):
        self.rssURL = path
        self.feed = feedparser.parse(self.rssURL)
        self.Nitem = len(self.feed["items"])
        return
    def ToonEerste(self):
        str=""
        self.Hitem = 0
        for i in range(self.Hitem,self.Hitem+2,1):
            if i < self.Nitem:
              entry = self.feed["entries"][i]
              str += entry.title + "\n\n" + entry.summary +      "\n__________________________________________________\n\n"
        self.canvas.delete(th)
        th = self.canvas.create_text(200,300, width=300, text = str)
        return
    def ToonVolgende(self):
        str=""
        self.Hitem += 3
        if self.Hitem >= self.Nitem:
            Hitem = 0
        for i in range(self.Hitem,self.Hitem+2,1):
            if i < self.Nitem:
              entry = feed["entries"][i]
              str += entry.title + "\n\n" + entry.summary + "\n__________________________________________________\n\n"
        self.canvas.delete(th)
        th = self.canvas.create_text(200,300, width=300, text = str)
        return
hoofdscherm = Achtergrond()
a = hoofdscherm.CreateCanvas(root, 1024,600)
b = hoofdscherm.canvas.create_rectangle(30, 120, 360, 500, fill= '#ffffff')
a.create_rectangle(10,10, 1014,80, fill='#ffffff')
a.create_rectangle(30, 120, 360, 500, fill= '#ffffff')
a.create_text(250, 50, text="Harens Lyceum" , font=('Calibri' , 40))
a.configure(bg='#14B4E1')
a.pack()
n = NewsFeed()
n.UpdateNews('http://www.nu.nl/rss/Algemeen')
n.ToonEerste(root)
n.ToonVolgende(root)
root.mainloop()

We willen graag wat hulp bij ons probleem, we hebben niet veel ervaring. We moeten een scherm maken met framboos waarop nieuws enz. voor school wordt weergegeven. Als je weet hoe we onze code kunnen repareren, zouden we de hulp van jullie erg op prijs stellen.


Antwoord 1, autoriteit 100%

Je NewsFeedklasse-instantie nheeft geen Canvas-kenmerk. Als u het Canvasgedefinieerd in uw Achtergrondclass instance hoofdschermwilt doorgeven aan n, kunt u dit definiëren onder de klassedefinitie voor NewsFeedmet behulp van __init__():

class NewsFeed ():
    def __init__(self, canvas):
        self.canvas = canvas
    ...

Als u vervolgens uw NewsFeed-object initialiseert als n, kunt u de Canvas-instantie van uw Achtergronddoorgeven class instance hoofdscherm:

n = NewsFeed(hoofdscherm.canvas)

Dit is een oplossing voor uw huidige probleem, maar er zijn andere fouten in uw code die u kunt zien zodra u deze wijzigt.

Other episodes