Как создавать поля для ввода (Entry), при нажатии на кнопку (Add_field)?

Как я могу добавлять поля ввода пользователя (Entry) при нажатии на кнопку "Add link", и удалять поле с конца, при нажатии на кнопку "Remove link"? Создал пустой список для сохранения введенной информации, для того чтобы использовать ее дальше в коде. Удаление и добавление элементов происходит, проблема с полями ввода.. Спасибо

def clicked():
    links_info = tkr.Label(window, text="Each given node must have at least one link\nfor example: (a, b, c), c - is optional argument.", font=("Arial", 8))
    links_info.grid(column=0, row=3)
    btn_add = tkr.Button(window, text="Add link", bg='#0269A1', fg="#ffffff", command=add_entry_field)
    btn_add.grid(column=1, row=3)
    btn_remove = tkr.Button(window, text="Remove link", bg='#0269A1', fg="#ffffff", command=remove_entry_field)
    btn_remove.grid(column=1, row=4)

def add_entry_field():
    entryWidgets.append(tkr.Entry())
    entryWidgets[-1].grid(column=0, row=4)
    print(entryWidgets)

def remove_entry_field():
    try:
        entryWidgets.pop()
    except IndexError as err:
        print("List is empty: ", err)
    print(entryWidgets)

btn = tkr.Button(window, text="Continue", bg='#0269A1', fg="#ffffff", command=clicked)
btn.grid(column=0, row=2)

window.mainloop()

Ответы (1 шт):

Автор решения: insolor
  1. Текстовые поля нужно добавлять в разные ячейки grid (при добавлении в одну ячейку они просто заменяют друг друга):

    def add_entry_field():
        entryWidgets.append(tkr.Entry())
        # Номер колонки определяется по количеству элементов в списке:
        entryWidgets[-1].grid(column=len(entryWidgets), row=4)  
        print(entryWidgets)
    
  2. При удалении нужно вызывать метод удаления элемента управления из grid (grid_forget) или уничтожения элемента управления (destroy):

    def remove_entry_field():
        try:
            # pop() возвращает удаленный из списка элемент, к этому элементу применяем нужный метод
            entryWidgets.pop().grid_forget()  # Или entryWidgets.pop().destroy()
        except IndexError as err:
            print("List is empty: ", err)
        print(entryWidgets)
    
→ Ссылка