Значение, которое вы вводите в четвертый виджет «Запись», сохраняется только после завершения события. То есть после завершения звонка на vf(event)
.
Я добавил кнопку, которая отображает содержимое виджетов ввода при нажатии. Это отобразит содержимое всех четырех виджетов.
В противном случае получить доступ к содержимому виджетов Entry после завершения вызова vk
.
import Tkinter as tk
def vf(event):
actual = entrylist.index(root.focus_get())
print "--", len(entrylist), actual
if event.char.upper() in ('V', 'F', ' '):
print event.char
if actual < len(entrylist) - 1:
entrylist[actual + 1].focus_set()
else:
#set focus to another widget?
for x in entrylist:
print "-", x.get(), "-"
#the last character is lost!
def show():
for x in entrylist:
print '-', x.get(), '-'
root = tk.Tk()
entrylist = []
for i in xrange(4):
e = tk.Entry(root, width=10)
e.grid()
e.bind("<KeyPress>", vf)
entrylist.append(e)
b = tk.Button(root, text='show', command=show)
b.grid()
root.mainloop()
Редактировать
Отвечая на вопрос в комментарии.
Похоже, что текст сохраняется в виджете ввода только после отпускания ключа. Таким образом, вы можете проверить наличие событий KeyRelease в четвертой записи. Затем в этот момент вы сможете получить доступ к значениям, хранящимся во всех четырех виджетах. Следующие работы (но я не нахожу это очень изящным - может быть более простой способ сделать это).
import Tkinter as tk
def vf(event):
entry_index = entries.index(root.focus_get())
if event.char.upper() in ('V', 'F', ' '):
if entry_index < len(entries) - 1:
entries[entry_index + 1].focus_set()
elif event.keysym not in ('Alt_r', 'Alt_L', 'F4'):
print event.keysym
return 'break'
def show(event):
if entries[-1].get():
# only print the values if the last Entry contains text
for i, e in enumerate(entries):
print 'var %s: %s' % (i, e.get())
root = tk.Tk()
entries = []
for i in xrange(4):
e = tk.Entry(width=10)
e.grid()
e.bind("<KeyPress>", vf)
if i == 3:
# catch KeyRelease events on the last Entry widget
e.bind("<KeyRelease>", show)
entries.append(e)
root.mainloop()