Как вернуть входные данные из поля ввода tkinter, сгенерированного al oop, в список для дальнейшего использования - PullRequest
1 голос
/ 19 апреля 2020

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

У меня есть два списка, один список «myLabelList», в котором есть такая информация, как «Имя задания, Имя проекта» и т. Д. c. и один пустой список «myEntryLists» для захвата информации из записи.

Проблема в том, что при i print(myEntryList) кажется, что отображается информация о записи, а не сам ввод. У меня есть обходной путь, но это именно то, что есть.

извините, если я плохо отформатировал это, это мой первый пост.

from tkinter import *

root = Tk()
root.title("Job Information Entry")
root.geometry("400x150")
topFrame = Frame(root)
bottomFrame = Frame(root)
topFrame.grid(row=0, column=0)
bottomFrame.grid(row=1, column=0)

myLabelList = ["Enter Job Number", "Enter Project Name", "Enter Job Name", "Enter Drawing Number"]
myEntryList = []
lst = []


# this is where i seem to be having problems
def ok_button_click():
    for entry in myEntryList:       # this is my workaround
        lst.append(entry.get())     # this is my workaround
    print(myEntryList)              # this is what im getting
    print(lst)                      # this is what i want to print()


x = 0

for i in myLabelList:
    myLabel = Label(topFrame, text=i)
    myEntry = Entry(topFrame, width=50)
    myLabel.grid(row=x, sticky=E)
    myEntry.grid(row=x, column=1)
    x = x + 1
    myEntryList.append(myEntry)


# bottomFrame
okButton = Button(bottomFrame, text="OK", command=ok_button_click)
cancelButton = Button(bottomFrame, text="Cancel")
okButton.grid(row=0, column=0)
cancelButton.grid(row=0, column=1)

root.mainloop()

1 Ответ

0 голосов
/ 19 апреля 2020

В этой строке вы вставляете виджет Entry в myEntryList:

myEntryList.append(myEntry)

Когда вы пытаетесь распечатать его, он дает вам печатное представление виджетов Entry, сохраненных в список.

Если вы хотите получить сам ввод, просто распечатайте список lst.

РЕДАКТИРОВАТЬ:

Запись является объектом. В OOP (объектно-ориентированное программирование) вы определяете классы, которые представляют объект. У каждого объекта есть свойства и методы. Подробнее о OOP можно прочитать здесь .

Виджет ввода - это пример объекта. Он имеет конструктор, который создает экземпляр этого класса (Entry()), свойства типа 'bg', 'fg' и методы типа get().

Когда вы вставляете в myEntryList виджет Entry, вы вставляете весь объект к списку, а не к входу, который он содержит. Чтобы получить ввод, вам нужно использовать метод get() в виджете Entry.

Надеюсь, теперь все ясно:)

...