在Tkinter中为StringVar的回调传递多个参数

2 投票
1 回答
3368 浏览
提问于 2025-04-18 18:16

我正在使用一小块输入框(Entry widgets),可能是5行1列、5行5列,或者其他类似的尺寸。当在输入框中输入数据时,我希望能把这些数据最终传递到一个二维的字符串数组中。

问题是,如果我有多个StringVar()变量,当我使用StringVar.trace()时,有没有办法把额外的参数传递给回调函数?

我现在有:

import Tkinter
guiRoot = Tkinter.Tk()
hWindow = Tkinter.Frame(guiRoot)
hWindow.grid();

def callback(*args):
    print "Current value:",sv.get()

sv = Tkinter.StringVar()
sv.trace("w", callback)
Tkinter.Entry(hWindow, textvariable=sv).grid(row=1,column=1)
guiRoot.mainloop()

但我还想把X和Y坐标也传递给回调。这可能吗?

如果我能通过StringVar的回调做到这一点,那我能不能在输入框上也做到呢?

如果我能在输入框上做到,有没有办法把事件(还有X和Y信息)一起传递给回调函数呢?

换句话说,有没有办法让我可以这样做:

def callback(*args):
    print "Array coordinates of Entry (or Stringvar):",x,y
    print "Current value:",sv.get

(是的,我知道我需要在那个回调中有办法引用x和y,所以我也需要知道怎么做。)

1 个回答

2

是的,你可以添加任何你想要的参数。

def callback(x,y,*args):
    print "x:", x, "y:", y
    print "args:", args
...
sv.trace("w", lambda name1, name2, op, x=100, y=200: callback(x,y,name1,name2,op))

撰写回答