Спасибо, Стивен!Tkinter Folklore Рассела Оуэна объясняет, как получить значение StringVar непосредственно из аргумента имени (PY_VAR #) с помощью globalgetvar (), но не как сопоставить имя с виджетом.Ваш лямбда-метод изменения аргументов обратного вызова подобен магии (по крайней мере для нас, новичков в Python).
Когда существует более одной записи, часто необходимо знать не только значение, но и какую записьизменилось.Немного расширив пример Стивена, следующий (Python3) передает индекс, который можно использовать для отслеживания нескольких записей.
from tkinter import Tk, Frame, Label, Entry, StringVar
class Fruitlist:
def entryupdate(self, sv, i):
print(sv, i, self.fruit[i], sv.get())
def __init__(self, root):
cf = Frame(root)
cf.pack()
self.string_vars = []
self.fruit = ("Apple", "Banana", "Cherry", "Date")
for f in self.fruit:
i = len(self.string_vars)
self.string_vars.append(StringVar())
self.string_vars[i].trace("w", lambda name, index, mode, var=self.string_vars[i], i=i:
self.entryupdate(var, i))
Label(cf, text=f).grid(column=2, row=i)
Entry(cf, width=6, textvariable=self.string_vars[i]).grid(column=4, row=i)
root = Tk()
root.title("EntryUpdate")
app = Fruitlist(root)
root.mainloop()