Thedudxo
Thedudxo

Reputation: 591

How to refresh the GUI window in Tkinter

Im trying to make a simple GUI with Tkinker that, when you press a button it adds 1 to the text on a label. However, the label simply remains at 0. Is there a way I can refresh it so it stays up-to-date?

heres what i have so far:

from Tkinter import *
clicks = 0
def click():
    global clicks
    global Window
    clicks += 1
    print 'ok', clicks

def close_window():
    global Window
    Window.destroy()

Window = Tk()
Number = Label(text = clicks)
close = Button(Window , text='exit' , command = close_window)
button = Button(Window,text = 'clickme' ,command = click)
button.pack()
close.pack()
Number.pack()
Window.mainloop()

Upvotes: 1

Views: 8937

Answers (2)

Erik Johnson
Erik Johnson

Reputation: 1164

You almost have it, but for your label you don't want to use "text", you want "textvariable". However, this takes a StringVar as a variable, which forces a little bit of busywork:

Window = Tk()
strclicks = StringVar()
Number = Label(textvariable=clicks)

and within click():

    clicks += 1
    strclicks.set(clicks)

Using "text" evaluates the variable at creation; "textvariable" updates the label when the variable updates.

Upvotes: 0

falsetru
falsetru

Reputation: 368954

clicks += 1 only changes the variable clicks.

Use Label.config(text=...) or Label['text'] = ... to change the label text.

def click():
    global clicks
    clicks += 1
    Number.config(text=clicks) # <------
    print 'ok', clicks

Upvotes: 3

Related Questions