python - Entry Widget is driving me nuts!: Tkinter Reddit Scraper thinks that a string entry is numbers? -
im in middle of small project, create tkinter gui outputs top ten posts user-defined subreddit reddit.com using api. because need have subreddit choice of user, needs inputted using tkinter entry widget. however, problem i'm having widget not refresh when user puts in information, , instead outputs bunch of numbers (".4302552760.4302552816.4367528344") right when program launches. can't seem thing record user puts in string variable can run through next few classes , make damn thing work. ive hit real roadblock here, , appreciate help.
ill give few samples of code, whole thing, , specific problem areas:
the whole code follows:
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) '''label2 = tk.label(self, text="confirm subreddit", command= confirmsubreddit()) label2.pack(pady=10, padx=10)''' button1 = tk.button(self, text="scrape subreddit", command=lambda: controller.show_frame(redditreturn)) button1.pack(pady=10, padx=10) e1 = tk.entry(self) e1.pack(pady=10, padx=10) startpage.entry1 = e1 '''adding brackets around user's entry label suffice praw api''' class bracketentry(object): def addbrackets(self): user_entry_plus_brackets = '"' + str(startpage.entry1) + '"' 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()
here class defined entry widget (if helps @ all):
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) '''label2 = tk.label(self, text="confirm subreddit", command= confirmsubreddit()) label2.pack(pady=10, padx=10)''' button1 = tk.button(self, text="scrape subreddit", command=lambda: controller.show_frame(redditreturn)) button1.pack(pady=10, padx=10) e1 = tk.entry(self) e1.pack(pady=10, padx=10) startpage.entry1 = e1
here first trying manipulate entry add parenthesis around can work reddit api:
class bracketentry(object): def addbrackets(self): user_entry_plus_brackets = '"' + str(startpage.entry1) + '"' print(user_entry_plus_brackets) return user_entry_plus_brackets
i put print(user_entry_plus_brackets) here show outputting bunch of numbers instead of string user enters.
i extremely new python (and coding in general) , perhaps have gone on head... appreciated!
thanks!
the thing widgets when coerce them string, return tkinter id. need create control variable (http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/control-variables.html) , associate entry.
self.entry_var = tk.stringvar() e1 = tk.entry(self,textvariable=self.entry_var)
instead of retrieving value entry doing:
str(startpage.entry1)
you value of control variable this:
user_entry_plus_brackets = '"' + self.entry_var.get() + '"'
i'm not @ home right test out, believe should able value of entry using it's .get() method without needing use control variable:
user_entry_plus_brackets = '"' + self.entry1.get() + '"'
Comments
Post a Comment