Как удалить текст из ВСЕХ полей ввода используя модуль 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 шт):

Автор решения: insolor

Я обычно советую собирать текстовые поля в список, потом при необходимости очистки пройтись циклом по этому списку, у каждого текстового поля вызвать очистку, т.е. что-то такое:

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 содержит только последнее присвоенное ей значение, т.е. последнее созданное текстовое поле, поэтому при нажатии на кнопку очищается только оно.

→ Ссылка