【问题标题】:How can I use the same callback function to trace multiple variables?如何使用相同的回调函数来跟踪多个变量?
【发布时间】:2014-12-09 00:31:52
【问题描述】:

我想在标签上显示几个 StringVar() 的值,并带有一些格式。

import tkinter as tk

keys = range(2) # 2 for simplicity

root = tk.Tk()
myVars = {key: tk.StringVar() for key in range(5)}
myStrVars = {key: tk.StringVar() for key in range(5)}

def callback0(*args):
    blah = '{0:.3f}'.format(float(myVars[0].get()))
    myStrVars[0].set(blah)

def callback1(*args):
    blah = '{0:.3f}'.format(float(myVars[1].get()))
    myStrVars[1].set(blah)
#etc...

myCallbacks = {0: callback0,
               1: callback1}
               #etc...

for key in keys:
    myVars[key].trace('w', myCallbacks[key])
    tk.Entry(root, textvariable=myVars[key]).pack()
    label = tk.Label(root, textvariable=myStrVars[key]).pack()

root.mainloop()

有没有一种方法可以编写回调函数,这样我就不必为要跟踪的每个变量编写一个回调函数了?

【问题讨论】:

    标签: python python-2.7 callback tkinter trace


    【解决方案1】:

    您可以将密钥和输入发送到函数。这是一个截断的版本,与您的代码略有不同,但可以满足您的需求。

    import tkinter as tk
    from functools import partial
    
    def callback(key, var, *args):
        print "callback var =", key, var.get()
        ##myStrVars[key].set(var[-1])
    
    root = tk.Tk()
    
    for key in range(5):
        var = tk.StringVar()
        var.trace('w', partial(callback, key, var))
        tk.Entry(root, textvariable=var).pack()
    
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 2019-08-21
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多