Обновление рамки Python Tkinter - PullRequest
2 голосов
/ 19 марта 2011

У меня проблемы с обновлением рамки 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 ]

2 голосов
/ 19 марта 2011

Ваша проблема в том, что вы не прикрепляете переменную к виджету. Кроме того, вам нужно использовать StringVar, так как виджет метки работает со строками, а не с целыми числами.

Попробуйте что-то вроде:

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

Tk обновляет отображение, когда цикл событий не используется. Поэтому вам нужно повторно войти в цикл обработки событий после установки нового значения.

0 голосов
/ 20 сентября 2018

Вы должны попытаться уничтожить сам ярлык и сделать его снова в коде с обновленным текстом и использовать self.root.update ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...