Есть ли способ динамически создавать записи и добавлять их вход в список | Tkinter - PullRequest
0 голосов
/ 23 февраля 2020

Впервые задаю вопрос здесь, но я пытался создать программу, в которой Entry создается динамически, но я не знаю, как взять текст из Entry и поместить его в список.

Я смотрел на вопрос здесь: Получение значений динамически сгенерированных полей ввода с использованием Tkinter , но я не мог понять, как заставить код работать в моем конкретном случае, и вещи, вероятно, изменились в прошлом пять лет.

Любая обратная связь будет принята.

Пример:

tk.Entry(TAB1, textvariable=username[i])
tk.Entry(TAB1, textvariable=username[i])

Первый получит значение типа 'username1', а второй получит ' username2 'и так далее для остальных динамически добавляемых Entry.

Если есть более разумный способ сделать это или вы хотите, чтобы я показал весь мой код, пожалуйста, дайте мне знать!

РЕДАКТИРОВАТЬ: Вот мой код для добавления кнопок

nextRow = 4

usernames = []

def addInput():
    global nextRow

    entry = tk.Entry(TAB1)
    entry.grid(row=nextRow, column=0, sticky='WE', padx=10, pady=2)
    ent2 = tk.Entry(TAB1).grid(row=nextRow, column=1, sticky='WE', padx=10, pady=2)
    ent3 = tk.Entry(TAB1).grid(row=nextRow, column=2, sticky='WE', padx=10, pady=2)

    nextRow += 1

    usernames.append(entry.get())

У меня также есть кнопка, которая использует addInput(), когда пользователь хочет добавить новую строку из трех tk.Entry

tk.Button(TAB1, text='Add', command=addInput, font=("Consolas", 12), width = 8).grid(row=1, column=1, sticky='W')

На данный момент я Я не уверен, как добавить запись и отслеживать ее значение.

1 Ответ

0 голосов
/ 23 февраля 2020

Вообще говоря, вам вообще не нужно использовать текстовую переменную. Просто сохраните записи в списке, и обратитесь к списку, чтобы получить значения. Использование textvariable в порядке, но большинство людей используют его, просто добавляет накладные расходы, не предоставляя никакой реальной ценности.

entries = []
for i in range(10):
    entry = tk.Entry(TAB1)
...
for i in range(10):
    print(f"Entry {i} has value {entries[i].get()}")

Если вы действительно хотите использовать textvariable, применяется тот же метод, но вы сохраняете переменную, а не запись.

vars = []
for i in range(10):
    var = tk.StringVar()
    vars.append(var)
    entry = tk.Entry(Tab1, textvariable=var)
...