Python Tkinter - 尝试通过动态创建的条目为每个

Python Tkinter - Trying to for each through dynamically created entries

我有一个动态生成的 tkinter 输入字段列表。我需要获取每个字段的内容,同时知道它指的是什么。我曾尝试添加类似 "entry"+count = Entry(..) 的内容,但正如预期的那样,它不会像那样工作,这确实是一种非常愚蠢的设计实践,所以我认为它需要采用数组的形式,但似乎不能弄清楚如何使用条目来做到这一点。

rowNum = 0
items = []

def tableGen(name):
    global rowNum
    entry = Entry(win).grid(row=rowNum, column=0)
    label = Label(win, text=name).grid(row=rowNum, column=1)
    self.items[rowNum] = [entry, label] # Problem Area 1
    rowNum += 1

def generate(): # Print each items value
    for item in items:
        print (item.get()) # Problem Area 2

# Generates Entrys and labels from file
e = ET.parse('file.xml').getroot()
for atype in e.findall('things'):
    tableGen(atype.get('name'))

generateBtn = Button(root, text="Generate", command=generate).pack()

generate()
root.mainloop()

我已将代码简化为查看我正在尝试执行的操作所需的最低限度。问题似乎是我将项目放在 table 中的位置或尝试解析它们(问题是 1 和 2)。我是 python 的新手,不知道该怎么做。在当前状态下,项目失败 in tableGen self.items[rowNum] = [entry, label] Name Error: name 'self' is not defined

我做错了吗?还有其他方法可以做到吗?


解决方案

rowNum = 0
items = []

def tableGen(name):
    global rowNum
    entry = Entry(win)
    entry.grid(row=rowNum, column=0)
    label = Label(win, text=name)
    label.grid(row=rowNum, column=1)
    items.append([entry, label])
    rowNum += 1

def generate(): # Print each items value
    for item in items:
        print('Entry:', item[0].get(), 'Label:', item[1].cget("text"))

# Generates Entrys and labels from file
e = ET.parse('file.xml').getroot()
for atype in e.findall('things'):
    tableGen(atype.get('name'))

generateBtn = Button(root, text="Generate", command=generate).pack()

generate()
root.mainloop()

使用 append() 将项目添加到列表末尾:

def tableGen(name):
    ...
    items.append([entry, label])
    rowNum += 1

这会生成列表的列表,所以需要使用索引来访问每一项的元素:

def generate(): # Print each items value
    for item in items:
        print('Entry:', item[0].get(), 'Label:', item[1].get())