Tkinter 变量

Tkinter variables

我用Tkinter做了一个简单的GUI。(代码在下面) 当我按下 "Fetch" 按钮时,我在命令行中从 GUI 获得了文本输入。

假设在此示例中,"user" 在 "Service Points Won" 字段中输入 0.5,在“Return Points Won”字段中输入 0.7 作为输入。 当我按下 "Fetch" 按钮时,我在命令提示符

中显示以下结果
0.5
0.7

我想要实现的是,在命令提示符中显示的结果旁边还会显示匹配的 "Label"。

因此 return 我的示例使用 0.5 和 0.7 作为输入。我想在命令提示符中得到如下结果。

"Service Points Won" 0.5
"Return Points Won" 0.7

GUI Script

from Tkinter import *

fields = 'Service Points Won', 'Return Points Won'

def fetch(variables):
    for variable in variables:
        print  "%s" % variable.get()      

def makeform(root, fields):
    lab1= Label(text="Stats", font="Verdana 10 bold")
    form = Frame(root)                              
    left = Frame(form)
    rite = Frame(form)
    lab1.pack(side=TOP)
    form.pack(fill=X) 
    left.pack(side=LEFT)
    rite.pack(side=RIGHT)

    variables = []
    for field in fields:
        lab1= Label()
        lab = Label(left, text=field)
        ent = Entry(rite)
        lab.pack(anchor='w')
        ent.pack(fill=X)
        var = StringVar()
        ent.config(textvariable=var)
        var.set('0.5')
        variables.append(var)
    return variables

if __name__ == '__main__':
    root = Tk()
    vars = makeform(root, fields)
    Button(root, text='Fetch', 
                 command=(lambda v=vars: fetch(v))).pack()
    root.bind('<Return>', (lambda event, v=vars: fetch(v)))   
    root.mainloop()

有什么建议吗?

由于您想将某些字段映射到其他字段,因此使用字典是比使用列表更好的选择。

def fetch(variables):
    for key, val in variables.items():
        print key, val.get()

def makeform(root, fields):
    ...
    variables = {}
    for field in fields:
        ...
        variables[field] = var #associate a field with its variable
    return variables

哪个会打印出来

Service Points Won 0.5
Return Points Won 0.7

请注意,您可以根据需要在 fetch 函数中设置打印格式。