Изменение значения по значению для виджетов или использование метода .trace_variable ()? - PullRequest
2 голосов
/ 12 ноября 2010

Существует ли тип события при изменении значения для виджетов ввода данных, таких как «Ввод», «Текст», «Спиннер», «Контрольная кнопка», «Радиопереключатель»?Под изменением значения я имею в виду способность определять, когда значение виджета изменилось из-за ввода с клавиатуры или действия вырезать / удалить / вставить (и текст edit_undo / edit_redo)?Я не вижу такого события, описанного в документации по событиям Tkinter [1].

Является ли надлежащая техника для привязки переменных Tkinter к значениям виджетов, которые я хочу отслеживать и использовать эти переменные '.trace_variable (' w ', ...) методы привязки к изменениям стоимости?Это кажется правильным подходом, но я не встречал много использования trace_variable () в исходном коде приложения Tkinter, который я изучал ... что заставляет меня быть осторожнее при использовании этого подхода.

[1] http://infohost.nmt.edu/tcc/help/pubs/tkinter/events.html

1 Ответ

2 голосов
/ 12 ноября 2010

Разные виджеты требуют разных решений. Например, кнопки проверки и переключатели имеют опцию команды, а с виджетом ввода вы можете использовать встроенные функции проверки.

Для всех виджетов, которые можно привязать к переменной, выполнение трассировки переменной является распространенным решением. Текстовый виджет является одним исключением, поскольку вы не можете связать его с переменной без особых усилий.

В мире tcl / tk я связываю все мои виджеты с одним массивом (имя tcl для хэш-карты / словаря), а затем помещаю одну трассу в массив. К сожалению, tkinter напрямую не поддерживает массивы tcl. Тем не менее, поддержку довольно легко взломать. Для получения дополнительной информации см. Мой ответ на этот вопрос: Как запустить код при изменении значения виджета Tkinter?

...