使用Tkinter获取动态生成的Entry字段的值

时间:2014-06-18 09:48:20

标签: python tkinter

我有一个属性列表,例如成本,价格,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()

有没有办法调整这个来实现我的结果,还是有更好的解决方案来获取动态生成的输入字段的值?

1 个答案:

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