user interface - TypeError Missing Positional Arguments? What is going on? --Python and Tkinter -
im trying code simple tkinter program returns reddit information user. in doing so, i'm receiving error message:
traceback (most recent call last): file "redditscraper4.py", line 111, in <module> app = redditscraper() file "redditscraper4.py", line 23, in __init__ frame = f(container, self) file "redditscraper4.py", line 93, in __init__ get_user_entry_string = get_user_entry.addbrackets() file "redditscraper4.py", line 62, in addbrackets user_entry = startpage() typeerror: __init__() missing 2 required positional arguments: 'parent' , 'controller'
i have absolutely no clue i've done wrong code. im lost, , on web seems have coherent answer problem.
here code:
import tkinter tk functools import partial webbrowser import open datetime import date import praw '''initialising applicaiton''' class redditscraper(tk.tk): def __init__(self, *args, **kwargs): tk.tk.__init__(self, *args, **kwargs) container = tk.frame(self) container.pack(side="top", fill="both", expand = true) container.grid_rowconfigure(0, weight=1) container.grid_columnconfigure(0, weight=1) self.frames = {} f in (startpage, redditreturn): frame = f(container, self) self.frames[f] = frame frame.grid(row=0, column=0, sticky="nsew") self.show_frame(startpage) def show_frame(self, cont): frame = self.frames[cont] frame.tkraise() '''the first page user see''' class startpage(tk.frame, object): def __init__(self, parent, controller): tk.frame.__init__(self, parent) label1 = tk.label(self, text="start page") label1.pack(pady=10, padx=10) button1 = tk.button(self, text="scrape subreddit", command=lambda: controller.show_frame(redditreturn)) button1.pack(pady=10, padx=10) self.entry_var = tk.stringvar() e1 = tk.entry(self,textvariable=self.entry_var) e1.pack(pady=10, padx=10) startpage.entry1 = self.entry_var.get() '''adding brackets around user's entry label suffice praw api''' class bracketentry(object): def addbrackets(self): user_entry = startpage() get_user_entry_string = user_entry.entry1() user_entry_plus_brackets = '"' + get_user_entry_string + '"' print(user_entry_plus_brackets) return user_entry_plus_brackets '''collecting data reddit''' class redditcollect(object): def getsubreddit(self): user_agent = "simple subreddit scraper" r = praw.reddit(user_agent=user_agent) '''remember add ability user-defined subreddit information''' user_entry = bracketentry() user_entry_variable = user_entry.addbrackets() posts = r.get_subreddit("pics").get_hot(limit = 10) return posts '''the window containing information reddit user''' class redditreturn(tk.frame, object): def __init__(self, parent, controller): tk.frame.__init__(self, parent) """creates buttons , frames gui""" get_user_entry = bracketentry() get_user_entry_string = get_user_entry.addbrackets() intro = get_user_entry_string + " on reddit: " newframe = tk.labelframe(self, text = intro) newframe.pack(fill="both", expand= true , anchor="nw") row = 0 redditcollectgetter = redditcollect() local_posts = redditcollectgetter.getsubreddit() p in local_posts: gotoarticle = partial(open, p.url) title = "(" + str(p.score) +") " + p.title tk.label(newframe, text= title, pady= 10, wraplength= 700, justify= "left").grid(row= row, column= 0, sticky= "w") tk.button(newframe, text= "read more!", command= gotoarticle).grid(row= row+1, column= 0, sticky= "w") tk.row = row + 2 app = redditscraper() app.mainloop()
any appreciated! thanks!
in bracketentry
class, in addbrackets
method, call user_entry = startpage()
. however, declare startpage
's __init__
method def __init__(self, parent, controller):
, means have provide parent
, controller
arguments.
edit: fix method, going have pass parent
, controller
objects way down call stack or find way of getting them addbrackets
method. e.g., redefine def addbrackets(self, parent, controller)
, , update infringing line: user_entry = startpage(parent, controller)
. have update calls addbracket
include new argument.
Comments
Post a Comment