Класс BadRoot
должен продемонстрировать вашу проблему.Вы можете закомментировать вызов к классу, чтобы проверить с полным, рабочим примером.Если вы запустите код как написано, он обновит метку в классе GoodRoot
.Первая закомментированная строка показывает альтернативный синтаксис для изменения текста в вашей метке.
from tkinter import Tk, Label
from time import sleep
from random import random
class BadRoot(Tk):
def __init__(self, price, time):
super().__init__()
self.labels = []
while True:
self.labels.append(Label(self, text=(price, time)))
self.labels[-1].pack()
self.update()
sleep(1)
class GoodRoot(Tk):
def __init__(self, callback):
super().__init__()
self.label = Label(self, text=str(callback()))
self.label.pack()
while True:
## self.label['text'] = str(callback())
self.label.configure(text=str(callback()))
self.update()
sleep(1)
if __name__ == '__main__':
## BadRoot('$1.38', '2:37 PM')
GoodRoot(random)
Проблема с вашим исходным кодом заключается в том, что новая метка создается и упаковывается в интерфейс каждый раз черезпетля.Что вы на самом деле хотите сделать, так это просто отредактировать текст, отображаемый надписью, вместо того, чтобы заменить метку новой.Есть и другие способы сделать это, но этот метод должен работать для вас.