Как удалить текст из ВСЕХ полей ввода используя модуль tkinter?
В коде есть несколько полей ввода:
for (ix, label) in enumerate(('key',) + fieldnames):
lab = Label(form, text=label)
global ent
ent = Entry(form)
lab.grid(row=ix, column=0)
ent.grid(row=ix, column=1)
entries[label] = ent
Всего полей ввода 4, и мне нужно каким то способом при нажатии на кнопку удалять текст из ВСЕХ полей ввода, я попытался сделать это так:
Button(window, text='Clear', command=lambda: ent.delete(0, 'end')).pack(side=RIGHT)
но при нажатии удаляется только текст из последнего поля для ввода
Ответы (1 шт):
Я обычно советую собирать текстовые поля в список, потом при необходимости очистки пройтись циклом по этому списку, у каждого текстового поля вызвать очистку, т.е. что-то такое:
entries = []
for (ix, label) in enumerate(('key',) + fieldnames):
lab = Label(form, text=label)
ent = Entry(form)
lab.grid(row=ix, column=0)
ent.grid(row=ix, column=1)
entries.append(ent)
...
def clear_all_entries():
for entry in entries:
entry.delete(0, 'end')
Button(window, text='Clear', command=clear_all_entries).pack(side=RIGHT)
У вас уже есть своя переменная entries, и насколько я понимаю, это словарь, где значения - текстовые поля. Для очистки этих текстовых полей нужно циклом пройтись по значениям словаря (entries.values()), и опять же, вызвать у каждого значения очистку:
def clear_all_entries():
for entry in entries.values():
entry.delete(0, 'end')
Button(window, text='Clear', command=clear_all_entries).pack(side=RIGHT)
Почему не работает Button(window, text='Clear', command=lambda: ent.delete(0, 'end')).pack(side=RIGHT) - потому что переменная ent содержит только последнее присвоенное ей значение, т.е. последнее созданное текстовое поле, поэтому при нажатии на кнопку очищается только оно.