更新Python Tkinter框架

2 投票
2 回答
8998 浏览
提问于 2025-04-16 14:01

我在更新一个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会在事件循环空闲时更新显示。所以在你设置新值之后,需要重新进入事件循环。

撰写回答