Обновление переменной метки окна Tkinter с данными вне потока - PullRequest
0 голосов
/ 05 февраля 2020

Я хочу обновить метку моего окна tkinter новой переменной из данных вне потока.

Вот мой пример кода:

class App(threading.Thread):
global small
global medium
global large
global jumbo
global reject
def __init__(self):
    threading.Thread.__init__(self)
    self.start()

def callback(self):
    self.root.quit()

def run(self):
    self.root = tk.Tk()
    self.root.protocol("WM_DELETE_WINDOW", self.callback)
    string1 = "SMALL: " + str(small) + '\n' + "MEDIUM: " + str(medium) + '\n' + "LARGE: " \
              + str(large) + '\n' + "JUMBO: " + str(jumbo) + '\n' + "REJECTED: " + str(reject) + '\n' + "TOTAL: " + str(total)
    label = tk.Label(self.root, text=string1)
    label.pack()


    self.root.mainloop()
app = App()
#actual code runs outside the App() thread

Переменные там изменяются фактическим кодом, выполняющимся вне потока. Я пытался использовать root.after(), но не могу заставить его работать.

1 Ответ

0 голосов
/ 05 февраля 2020

После того, как переводчик запустит строку self.root.mainloop(), она застрянет внутри бесконечной l oop. Остальная часть кода после этой строки не будет запущена. Таким образом, код, который изменяет все переменные, должен быть до self.root.mainloop() или вызываться кнопками.

Что касается того, как устанавливать обратные вызовы кнопок, вы можете обратиться к python Tk с сохранением текста метки после I набор

...