我正在尝试根据列表自动填充Entry字段,但我的确很短。
populate = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"]
A1 = StringVar()
A2 = StringVar()
A3 = StringVar()
A4 = StringVar()
A5 = StringVar()
A6 = StringVar()
A7 = StringVar()
A8 = StringVar()
A9 = StringVar()
A10 = StringVar()
UN = StringVar()
lfAB1 = Labelframe(frameNewEntry, text = 'Answer 1')
lfAB1.grid(row = 0, column = 0, columnspan = 3, sticky = W+E+N+S)
AB1 = Entry(lfAB1, textvariable=A1)
AB1.pack()
#repeat for AB2 -> AB10
A1.set(populate[0])
A2.set(populate[1])
A3.set(populate[2])
A4.set(populate[3])
A5.set(populate[4])
A6.set(populate[5])
A7.set(populate[6])
A8.set(populate[7])
A9.set(populate[8])
A10.set(populate[9])
UN.set(populate[10])
无法将Entry字段设置为所需数据。 但是,如果我犯了这样的错误:
...
A9.set(populate[9])
UN.insert(0, populate[10])
字段填写正常,但显然错误的字段除外。 (我知道insert()应该在Entry字段本身使用,但它是在很早的时候!) 应该注意,使用insert()填充Entry字段也不起作用。
有什么想法吗? :d
答案 0 :(得分:1)
您不需要为每个条目使用StringVar
,因为条目小部件具有get
方法来检索当前值。您可以使用StringVar
,但在我看来,它会增加开销,而不会提供任何额外的值(除非您使用变量跟踪,而您不是这样)。
例如,假设您的条目小部件存储在列表中,您可以轻松打印出来:
def dump():
for e in entries:
print("=>" + e.get())
您还可以在列表中创建这些小部件,这样可以使代码更短,更易于维护:
entries = []
for row, ch in enumerate(populate):
lf = LabelFrame(frameNewEntry, text="Answer %s" % row)
lf.grid(row=row, column=0, columnspan=3, sticky=W+E+N+S)
e = Entry(lf)
entries.append(e)
e.pack()