我有一个属性列表,例如成本,价格,isObsolete等,我希望动态生成这些属性作为标签,下方有一个Entry字段,供用户插入正确的值。
这样做的最佳方法是将属性存储在字典中的值中,并在更新Entry字段时更新此字典。
我尝试在分配给我的输入字段的StringVar上使用了trace_variable函数,但是当我输入字段(作为测试)或在我的字段上运行函数时它似乎没有用。 class来获取字典的键和值:
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()
有没有办法调整这个来实现我的结果,还是有更好的解决方案来获取动态生成的输入字段的值?
答案 0 :(得分: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()