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

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -