Что я пытаюсь сделать, так это создать графический интерфейс, в котором, когда вы начинаете печатать в поле ввода, другое появляется сразу под тем, которое вы вводите. Затем, когда вы начинаете вводить тот, который выскакивает, появляется другое. Возможно ли это с TKinter и Python?

Редактировать:

Итак, что у меня сейчас есть:

entry1 = StringVar()
numberLabel3 = Label(window, text = "3. External meeting attendees")
r+=1
numberLabel3.grid(column = 0, row = r, sticky = W)
externalAtendeesLabel = Label(window, text = "input name of external meeting atendee: ")
r+=1
externalAtendeesLabel.grid(column = 1, row = r, sticky = E)
externalAtendeesEntry = Entry(window, textvariable = entry1)
externalAtendeesEntry.grid(column = 2, row = r)
#Note to self: Find a smart way of dynamically expanding this "list" of entries

(Есть еще код выше и ниже этого, но это соответствующий код для моего вопроса)

Где r - это переменная, которую я сделал, чтобы упростить вставку чего-либо в середину моего довольно длинного кода.

Я использую следующие импорты:

from tkinter import *
from PIL import ImageTk
from PIL import Image
import os

Я использую модули изображений и ОС, чтобы вставить изображение дальше в свой графический интерфейс.

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

Как мне динамически создавать потенциально бесконечное количество переменных?

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

-1
T. Aalbaek 5 Окт 2018 в 09:56

1 ответ

Лучший ответ

Во-первых, вам не нужно использовать StringVar. Это только усложняет ваш код, не представляя реальной ценности. Другая часть ответа - хранить записи в списке.

Например, создайте функцию с именем addEntry, которая создает запись и добавляет ее в список:

entries = []
...
def addEntry():
    entry = tk.Entry(...)
    entry.pack(...)
    entries.append(entry)

Чтобы получить значения позже, просто перебирайте список:

for entry in entries:
    print(entry.get())

При этом вы можете добавлять записи, когда захотите. Вы можете, например, выполнить привязку к <Any-KeyRelease>, чтобы создать новую запись по мере того, как вводит пользователь (обязательно сделайте это только в том случае, если еще нет пустой записи). Или выполните привязку к <Return> или <FocusOut>, или по нажатию кнопки «новый человек», или по другому выбору.

0
Bryan Oakley 5 Окт 2018 в 12:14