Существует ли адаптируемый способ представления переменной в окне Tkinter, чтобы она изменялась с остальной частью программы? - PullRequest
0 голосов
/ 25 января 2020

Скажем, у меня был такой алгоритм (потому что я делаю):

from tkinter import *

x = 0 # For Example
window = Tk()
#window.minsize(Whatever, Whatever Else)
label = Label(window, text=x)
label.pack()

Я также хочу регулярно менять x во время программы на значение датчика, но я просто буду использовать простой l oop, чтобы показать, что мне нужно:

for loop in range(4):
    x = x+1 #If, say, the sensor value goes up by 1 each time

Могу ли я что-нибудь сделать, чтобы обновлять текст в окне (на ярлыке) каждый раз, когда меняется х (что не указано c к этому коду, чтобы каждый мог его использовать)?

Ответы [ 2 ]

0 голосов
/ 25 января 2020

tkinter имеет специальные классы для хранения значений IntVar(), StringVar(), DoubleVar(), которые можно использовать с виджетом для автоматического обновления текста в Label или получения значения из Entry (et c.)

Но для этого нужно использовать .get() и .set()

Другая проблема заключается в том, что l oop и долго выполняющийся код могут блокировать mainloop, что перерисовывает aws виджеты. Иногда может потребоваться window.update(), чтобы заставить tkinter перерисовывать виджеты.

import tkinter as tk

def change():
    x.set(x.get()+1)
    window.after(1000, change)

window = tk.Tk()

x = tk.IntVar(value=0) # after creating Tk()

label = tk.Label(window, textvariable=x)
label.pack()

change()

window.mainloop()
0 голосов
/ 25 января 2020

Взгляните на Шаблон наблюдателя . Этот шаблон проектирования решает общую проблему, которая у вас есть.

Ваш GUI должен быть наблюдателем данных, которые он предоставляет. Когда эти данные изменяются, изменяющийся компонент должен уведомлять наблюдателя (GUI) об изменении состояния.

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