Измените определение вашей функции change_button_text
, чтобы принимать параметры. Функции обратного вызова, вызываемые из функции trace
, всегда получают три аргумента: имя переменной, индекс и режим. Ничто из этого не является действительно интересным, но ваша функция должна соответствовать этой сигнатуре для обратного вызова для работы.
Чтобы исправить это, измените функцию обратного вызова, чтобы она выглядела так:
def change_button_text(name, index, mode):
buttontext.set(widget1.get())
Если вы предпочитаете это, вы также можете поместить lambda
в вызов trace
, чтобы сохранить определение функции чистым (в духе «зачем определять переменные там, если вы их не используете») ):
widget1.trace("w", lambda n, i, m: change_button_text())
Ваш обратный вызов может остаться в этом случае.