Если вы хотите, чтобы какое-то действие происходило всякий раз, когда изменяется содержимое виджета Entry
, наиболее распространенное решение - связать переменную tkinter с записью, а затем поместить трассировку в переменную - трассировка может вызвать функция всякий раз, когда переменная изменяется.
Например, начните с добавления этой строки после создания переменной name
:
name.trace("w", writefile)
Это приведет к вызову writefile
при каждом изменении значения.
Когда трассировка вызывает функцию, она передаст несколько переменных. Ваша функция не использует переменные, но должна принять их, поэтому измените сигнатуру функции так, чтобы она выглядела следующим образом:
def writefile(*args):
Для получения дополнительной информации об этих аргументах см. Каковы аргументы для обратных вызовов метода трассировки переменных Tkinter?
Наконец, если вы хотите, чтобы файл отражал то, что находится в виджете ввода (в отличие от добавления новой строки каждый раз, когда изменяется Entry
), вам нужно изменить режим оператора open
на w
вместо a+
, чтобы при каждом вызове файл перезаписывался новым значением.
Последняя функция должна выглядеть следующим образом:
def writefile(*args):
with open("/home/max/writeThings/name.txt", "w") as f:
f.writelines(name.get())
print("File has been written !")
примечание: вызывать root.update()
внутри этой функции совершенно бессмысленно, так как tkinter автоматически обновится, когда функция вернется.