Каковы аргументы для обратных вызовов метода трассировки переменной Tkinter?

Python имеет классы для переменных Tkinter StringVar() , BooleanVar() и т. Д. Все они совместно используют методы get() , set(string) и trace(mode, callback) . Функция callback переданная в качестве второго аргумента для trace(mode, callback) , передается по четырем аргументам: self, n, m, x .

Для примера BooleanVar() они выглядят как '', 'PYVAR0', 'w' .

Третий аргумент x представляет собой режим, который вызвал трассировку, в моем случае переменная была изменена. Однако какова первая переменная, представляющая собой пустую строку? Что второе, если бы я должен был догадаться, что я бы назвал внутреннее имя переменной?

Первый аргумент – это имя внутренней переменной. Более или менее бесполезный в контексте tkinter, но чрезвычайно полезный для базового интерпретатора tcl.

Если первый аргумент представляет переменную списка (маловероятно в tkinter), второй аргумент будет индексом в этом списке. Если это масштабируемая переменная, вторым аргументом будет пустая строка.

Третий аргумент – операция, полезная, если вы используете тот же метод для чтения, записи и / или удаления переменной. Этот аргумент указывает, какая операция вызвала обратный вызов. Это будет «w» для операции записи (установка переменной) и «r» для операции чтения (получение значения переменной). Это будет «u», если переменная удалена («u» является коротким для «unset»)

Tkinter – это оболочка python вокруг интерпретатора tcl / tk. Окончательную документацию для переменных трасс можно найти здесь: http://tcl.tk/man/tcl8.5/TclCmd/trace.htm#M14 . Хотя, это только документы, как работает внутренняя трассировка, обертка tkinter иногда массирует данные.