使用Tkinter获取动态生成的输入框值
我有一堆属性,比如成本、价格、是否过时等等。我想动态生成这些属性的标签,并在下面放一个输入框,让用户可以输入正确的值。
看起来最好的办法是把这些属性和对应的值存储在一个字典里,每当输入框的内容更新时,就更新这个字典。
我试着在分配给输入框的StringVar上使用trace_variable函数,但当我在输入框里输入内容时(作为测试)或者运行一个函数来获取字典的键和值时,它似乎都没有反应:
from Tkinter import *
import ttk
t = ['cost','price','isObsolete']
root = Tk()
rowAcc = 1
colAcc = 0
d = {}
for item in t:
newValue = StringVar()
def callback(*args):
print args[0] + " variable changed to " + newValue.get()
d[item] = newValue.get()
newValue.trace_variable("w", callback)
ttk.Label(root, text=item).grid(column=colAcc, row=rowAcc, sticky=(N, W))
reqEntry = ttk.Entry(root, textvariable=newValue, width=19)
reqEntry.grid(column=colAcc, row=rowAcc + 1, sticky=(N, W), pady=3, padx=1)
colAcc += 1
def printDict():
for key in d:
print key, d[key]
root.mainloop()
有没有办法调整这个来达到我的目的,或者有没有更好的方法来获取动态生成的输入框的值呢?
1 个回答
2
把 StringVar
存到数组里
from Tkinter import *
master = Tk()
frame = Frame(master)
frame.pack()
s_vars = []
for i in range(5):
s_vars.append( StringVar() )
def onChange(a ,b, c, s_var):
print a, "changed to", s_var.get()
s_vars[i].trace('w', lambda a, b, c, x=i: onChange(a, b, c, s_vars[x]) )
en = Entry(frame, textvariable=s_vars[i])
en.pack()
s_vars[i].set( str(i) )
mainloop()