Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Making python/tkinter label widget update?

Tags:

I'm working on getting a python/tkinter label widget to update its contents. Per an earlier thread today, I followed instructions on how to put together the widgets. At runtime, however, the label widget does NOT change contents, but simply retains its original content. As far as I can tell, decrement_widget() is never called at all. Any ideas?

def snooze (secs):   """   Snoozes for the given number of seconds. During the snooze, a progress   dialog is launched notifying the    """    root = Tkinter.Tk()   prompt = 'hello'   label1 = Tkinter.Label(root, text=prompt, width=len(prompt))   label1.pack()    remaining = secs    def decrement_label ():     text = "Snoozing %d sec(s)" % remaining     remaining -= 1     label1.config(text=text, width=100)     label1.update_idletasks()    for i in range(1, secs + 1):     root.after(i * 1000, decrement_label )    root.after((i+1) * 1000, lambda : root.destroy())   root.mainloop() 
like image 456
Stephen Gross Avatar asked Dec 16 '09 21:12

Stephen Gross


1 Answers

You'll want to set the label's textvariable with a StringVar; when the StringVar changes (by you calling myStringVar.set("text here")), then the label's text also gets updated. And yes, I agree, this is a strange way to do things.

See the Tkinter Book for a little more information on this:

You can associate a Tkinter variable with a label. When the contents of the variable changes, the label is automatically updated:

v = StringVar() Label(master, textvariable=v).pack()  v.set("New Text!") 
like image 64
Mark Rushakoff Avatar answered Nov 03 '22 07:11

Mark Rushakoff