更新Python Tkinter框架
我在更新一个Python Tkinter的界面时遇到了一些困难。我创建了一个界面,上面有一些标签和文本框。当有人按下一个按钮时,我想进行一些计算,并更新这些标签和文本框。我可以把数据打印到控制台,但就是无法让Tk的界面更新。请问我该怎么做才能让countFld显示更新后的值呢?
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 个回答
1
你可以试着先把这个标签删掉,然后在代码里重新创建一个新的标签,记得把更新后的文字放进去,最后使用 self.root.update() 来更新界面。
2
你的问题是没有把变量和控件连接起来。此外,你需要使用StringVar,因为标签控件是处理字符串,而不是整数。
试试下面这样的代码:
self.countStr = StringVar()
self.countStr.set(str(self.count))
Label(self.countFrame, textvariable=self.countStr).pack(side=RIGHT, padx=5)
Tk会在事件循环空闲时更新显示。所以在你设置新值之后,需要重新进入事件循环。