Мне кажется, что это вопрос обработчика событий.Когда клавиша набрана, ваш код сначала регистрирует нажатие клавиши и выполняет связанную команду execute_e.Только после того, как он обработает это, и ваш обработчик события возвратит, он обновит запись с символом и приступит к обновлению переменной tkinter.
Поэтому ваша команда печати поступает до того, как ваша переменная была обновлена, и вы печатаетепредыдущая версия вашей переменной.Если вы попытаетесь удалить символ из своей записи, вы увидите, что вы получите предыдущую строку с только что удаленным символом.
Самый простой способ решить эту проблему для вас - это, вероятно, связать команду сПеременная tkinter, а не связка ключей.Делайте это, используя trace, когда переменная записывается следующим образом:
var.trace('w', execute_e)
Существуют также некоторые методы для управления обработчиком событий и выбора порядка выполнения команд.root.after_idle выполнит команду, когда коду больше нечего делать (когда он вычислил все остальное, что вы просили сделать).Попробуйте эту версию своего кода:
from tkinter import *
master = Tk()
var = StringVar()
def execute_e(*key):
def printy():
print(var.get())
master.after_idle(printy)
E = Entry(master, width=30, textvariable=var)
E.pack()
E.bind('<Key>', execute_e)
master.mainloop()