如何使用同一个回调函数来跟踪多个变量?

2024-04-30 03:36:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想显示几个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()

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


Tags: keyinformatfordefargsrangeroot
1条回答
网友
1楼 · 发布于 2024-04-30 03:36:15

您可以将键和输入发送到函数。这是一个被截断的版本,与您的代码稍有不同,但我认为您希望这样做。在

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

相关问题 更多 >