_tkinter.TclError: нет событий, указанных в привязке
Это должно быть относительно очевидно. Если вы посмотрите на любой из множества примеров bind()
в SO или Google, вы обнаружите, что в первом аргументе всегда есть что-то, определяющее c, и никогда не бывает пустой строки.
Найдите время, чтобы читать о tkinter-events-and-bindings .
С вами 2 проблемы root.bind()
1-й, каждый раз, когда вы нажимаете в любом месте экрана, он вызывает функцию. Скорее всего, это не то, что вам нужно.
Вторая проблема, связанная как с привязкой, так и с командой кнопки, заключается в вашей лямбде. events=ents: fetch(e)
вы определяете свой список записей как events
, но затем передаете e
в функцию. Поэтому вы должны исправить это.
Лично я бы создал список в том же месте, где вы определяете root, а также определяете root в глобальном пространстве имен. Это также позволит нам избежать лямбды.
import tkinter as tk
fields = ['Email', 'Password', 'School']
def fetch(_=None):
for ndex, entry in enumerate(entries):
print('{}: {}'.format(fields[ndex], entry.get()))
root = tk.Tk()
root.config(background='gray')
entries = []
for ndex, field in enumerate(fields):
tk.Label(root, width=15, text=field, anchor='w').grid(row=ndex, column=0, sticky='ew')
entries.append(tk.Entry(root))
entries[-1].grid(row=ndex, column=1, sticky='ew')
# The problem with root.bind is that it will constantly be calling the function anywhere you click on root.
root.bind('<Button-1>', fetch)
tk.Button(root, text='Show', command=fetch).grid(row=len(fields)+1, column=1, sticky='ew')
tk.Button(root, text='Quit', command=root.quit).grid(row=len(fields)+2, column=1, sticky='ew')
root.mainloop()