2013-12-14 119 views
1

我試圖用Tkinker製作一個簡單的圖形用戶界面,當你按下按鈕時,它會將1添加到標籤上的文本中。但是,標籤只保留在0.是否有方法可以刷新它以保持最新?如何刷新Tkinter的GUI窗口

繼承人是我迄今爲止:

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() 

回答

3

clicks += 1只更改變量clicks

使用Label.config(text=...)Label['text'] = ...更改標籤文本。

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

你幾乎擁有它,但你的標籤,你不希望使用「文本」,你想「textvariable」。然而,這需要一個STRINGVAR作爲變量,這就迫使繁忙的工作中一點點:)

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

和內點擊(:

clicks += 1 
    strclicks.set(clicks) 

使用「文本」評估在創建變量; 「textvariable」在變量更新時更新標籤。

+0

對於這樣一個簡單的問題,IMO文本變量是矯枉過正的。無論是否帶有文本變量,更新都需要一個函數調用(widget.configure或variable.set)。文本變量的使用需要額外的對象,而不是直接配置標籤而沒有真正的優勢。 –

+0

@BryanOakley這是一個合理的位置。在開始使用Python之前,我曾經是一名長期的Tcl用戶,所以我對文本變量的態度受到了影響。在Tcl中,變量不需要是一個特殊的對象,它只是工作,沒有必要的調用。實際上,我在回答其他答案之前寫了我的答案,並將其作爲確認進行測試,並重新發現了對StringVar的需求。我編輯我的答案使用StringVar,實際上是正確的,但我必須同意使用.config在這種情況下更簡單。 –