2

I have a listbox that I want to update every minute or so. It pulls XML data, parses it and put it into the list box automatically. I have figured out to use the .after method but upon implementing it outside of the class I run into bug after bug trying to make it run. I believe my main issue is just not calling the application correctly but I could be wrong. Here is some of the relevent code.

This is all outside the main class

def refresher(frame):
    subreddit=Application.entryVar(Application)
    Application.getXML(subreddit)
    frame.after(1000,refresher,frame)

main = tk.Tk()
main.wm_title("Readdit")
# main.geometry("350x400")
app = Application(master=main)
# Begins the applications GUI loop
# app.__init__()
refresher(main)
app.mainloop()

Here is the beginning of the program and this is where it ultimately falls back upon with all the bugs.

class Application(tk.Frame):

    print("what about this?")
    def __init__(self, master=None):
        self.threadTitle = tk.StringVar()
        self.threadAuth = tk.StringVar()
        self.threadPub = tk.StringVar()
        self.threadArtLink = tk.StringVar()
        self.threadLink = tk.StringVar()
        self.threadImg = tk.StringVar()
        self.threadArtLink.set('Click something to display thread info')
        self.photo = Image.open("temp.png")
        self.photo = self.photo.resize((250,250), Image.ANTIALIAS)
        self.threadImage = ImageTk.PhotoImage(self.photo)
        self.errMes = tk.StringVar()
        if not os.path.exists('Pics'):
            os.makedirs('Pics')
        # print('Something')



        # Intializes tkinter gui framework
        tk.Frame.__init__(self, master)
        # Packs widgets needed
        self.grid()
        # Creates the widgets functions
        self.createWidgets()
        # Intializes the man rss.xml
        self.initial()

    def createWidgets(self):
        # Create entrybox and align to grid
        self.send_entry = tk.Entry(self)
        self.send_entry.grid(row=0,column=0)

        # Create button,allign to grid, get xml
        self.change_sub = tk.Button(self,text='Change Subreddit',padx=5, pady=5, command=lambda :self.entryVar())

And here is the full error

Traceback (most recent call last):
  File "S:/Projects/xmlParser.py", line 306, in <module>
    refresher(main)
  File "S:/Projects/xmlParser.py", line 296, in refresher
    subreddit=Application.entryVar(Application)
  File "S:/Projects/xmlParser.py", line 290, in entryVar
    rawInput=self.createWidgets(self).send_entry.get()
  File "S:/Projects/xmlParser.py", line 40, in createWidgets
    self.send_entry = tk.Entry(self)
  File "C:\Python33\lib\tkinter\__init__.py", line 2506, in __init__
    Widget.__init__(self, master, 'entry', cnf, kw)
  File "C:\Python33\lib\tkinter\__init__.py", line 2068, in __init__
    BaseWidget._setup(self, master, cnf)
  File "C:\Python33\lib\tkinter\__init__.py", line 2046, in _setup
    self.tk = master.tk
AttributeError: type object 'Application' has no attribute 'tk'
2
  • What does do the method Application.getXML? Commented Jan 13, 2014 at 19:57
  • It pulls XML from a site and parses it but it needs to passed a string variable to run properly Commented Jan 14, 2014 at 2:24

2 Answers 2

2

I think you should use your app directly in the function call to refresher:

def refresher(frame):
    frame.getXML()# I Don`t know what do this function, just an example
    frame.after(1000,refresher,frame)

main = tk.Tk()
main.wm_title("Readdit")
# main.geometry("350x400")
app = Application(master=main)
# Begins the applications GUI loop
# app.__init__()
refresher(app) #use app here
app.mainloop()
Sign up to request clarification or add additional context in comments.

Comments

0

It looks like the problem is here:

Application.entryVar(Application)

Application is a class rather than an object, so my guess is that you should be using an instance of Application both places in that code.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.