Переменные Tkinter
Специальные переменные, которые сами обновляют связанные с ними виджеты на экране.
Обычные переменные Python не «знают», когда их значение используется в интерфейсе — связь
с виджетом нужно устанавливать явно, каждый раз заново. Для случаев, когда несколько виджетов
должны отражать одно и то же значение синхронно, Tkinter предлагает свои специальные
переменные: StringVar, IntVar,
BooleanVar, DoubleVar.
import tkinter as tk
root = tk.Tk()
imya = tk.StringVar(value="Гость")
label = tk.Label(root, textvariable=imya) # метка сама обновится при смене imya
label.pack()
def smenit_imya():
imya.set("Cartesian")
button = tk.Button(root, text="Сменить имя", command=smenit_imya)
button.pack()
root.mainloop()
Значение достают методом .get() и меняют методом
.set() — а виджеты, связанные через
textvariable (или variable у
Radiobutton/Checkbutton), обновляются на экране автоматически.
StringVar и подобные — специальный инструмент именно для связи с виджетами, а не universal-замена всех переменных программы. Обычные int, str, list по-прежнему отлично подходят для хранения данных приложения, которые не отображаются напрямую в виджете.Чуть глубже: trace_add
Можно реагировать на каждое изменение Tk-переменной:
def pri_izmenenii(*args):
print("Новое значение:", imya.get())
imya.trace_add("write", pri_izmenenii)
Это удобно для «реактивных» интерфейсов, но не обязательно на старте — большинство форм прекрасно обходятся обычным чтением значения по кнопке.