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 NewsFeed
klasse-instantie n
heeft geen Canvas
-kenmerk. Als u het Canvas
gedefinieerd in uw Achtergrond
class instance hoofdscherm
wilt doorgeven aan n
, kunt u dit definiëren onder de klassedefinitie voor NewsFeed
met 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 Achtergrond
doorgeven 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.