2011-03-19 81 views
2

我很難更新python的Tkinter框架。我用 畫一些標籤和文本字段,當一個人按下一個按鈕時,我想要做一些 計算並更新標籤和文本字段。我可以將數據打印到我的 stdout,但我無法獲取Tk屏幕進行更新。我怎樣才能讓countFld顯示更新的值?更新python的Tkinter框架

class Application(Frame): 

    def __init__(self): 
     self.root = Tk() 
     Frame.__init__(self, self.root) 
     self.count = 0 
     self.createWidgets() 

    def createWidgets(self): 
     self.countFrame = Frame(self, bd=2, relief=RIDGE) 
     Label(self.countFrame, text='Count:').pack(side=LEFT, padx=5) 
     self.countFld = IntVar() 
     Label(self.countFrame, text=str(self.count)).pack(side=RIGHT, padx=5) 
     self.countFld.set(self.count) 
     self.countFrame.pack(expand=1, fill=X, pady=10, padx=5) 

     self.CNTBTN = Button(self) 
     self.CNTBTN["text"] = "UPDATE" 
     self.CNTBTN["fg"] = "red" 
     self.CNTBTN["command"] = self.update_count 
     self.CNTBTN.pack({"side": "left"}) 

    def update_count(self): 
     self.count = self.count + 1 
     print "Count = %" % self.count #prints correct value 
     self.countFld.set(self.count) #Does not update display 

回答

2

你的問題是你不把變量附加到小部件。此外,您需要使用StringVar,因爲Label Widget在字符串上操作而不在Ints上操作。

嘗試類似:

self.countStr = StringVar() 
self.countStr.set(str(self.count)) 
Label(self.countFrame, textvariable=self.countStr).pack(side=RIGHT, padx=5) 

Tk的更新顯示,當事件循環處於閒置狀態。因此,您需要在設置新值後重新進入事件循環。