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