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

时间:2015-04-19 23:30:06

标签: python python-3.x tkinter

我有一个动态生成的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()

我已经将代码简化为最小化,以便查看我正在尝试做的事情。问题似乎在于我将项目放在表格中或尝试解析它们(问题是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()

1 个答案:

答案 0 :(得分:2)

使用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())