Самый простой способ - добавить трассировку в связанную переменную. В пределах трассы вы можете изменить состояние кнопки в зависимости от текущего значения.
Сначала определите функцию, которая будет вызываться трассировкой:
def on_entry_trace(self, *args):
new_state = "disabled" if self.description.get() == "" else "normal"
self.co_button.configure(state=new_state)
Затем создайте трассировку и заставьте ее вызываться для установки начального состояния. Вы сделали бы это в той же функции, которая создает переменную.
Первый аргумент trace
сообщает tkinter, когда вызывать связанную функцию. "w"
говорит о необходимости вызова функции всякий раз, когда в переменную записывается (то есть: значение изменяется). Второй аргумент - это вызываемая функция.
self.description.trace("w", self.on_entry_trace)
self.description.set("") # initialize the state
Как только это настроено, функция будет вызываться всякий раз, когда изменяется значение виджета ввода.
Для получения дополнительной информации о том, какие аргументы для функции, вызываемой trace, см. Каковы аргументы для обратных вызовов метода трассировки переменной Tkinter?
Effbot имеет достойную запись переменных трасс, включая информацию о трассах, на странице Классы переменных (BooleanVar, DoubleVar, IntVar, StringVar)