无法更新输入字段

时间:2015-07-06 12:42:52

标签: python tkinter

我正在尝试根据列表自动填充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

1 个答案:

答案 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()