有点不清楚“将参数传递给我的回调函数”是什么意思。你已经在这么做了!例如:
from Tkinter import *
def callbackfunc(*args, **kwargs):
print args, kwargs
print "Hello World!"
class App(object):
def __init__(self, master):
frame = Frame(master)
frame.pack()
optionvalue = IntVar(master)
optionvalue.set(2)
optionvalue.trace("w", callbackfunc)
self.optionmenu = OptionMenu(master, optionvalue, 1, 2, 3, 4)
self.optionmenu.pack()
root = Tk()
app = App(root)
root.mainloop()
运行时...
$ python foo.py
('PY_VAR0', '', 'w') {}
Hello World!
所以你看,当 Tkinter 调用你的回调时,它会向它传递参数。如果您想做一些除了打印它们之外的事情,您可以通过传递方法而不是函数将它们存储在某种状态中。
from Tkinter import *
class App(object):
def __init__(self, master):
frame = Frame(master)
frame.pack()
optionvalue = IntVar(master)
optionvalue.set(2)
optionvalue.trace("w", self.callbackfunc)
self.optionmenu = OptionMenu(master, optionvalue, 1, 2, 3, 4)
self.optionmenu.pack()
self.state = []
def callbackfunc(self, *args):
self.state.append(args)
print self.state
root = Tk()
app = App(root)
root.mainloop()
运行时...
$ python foo.py
[('PY_VAR0', '', 'w')]
[('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w')]
[('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w')]
另外,也许您想访问的值optionvalue
。然后您可以保存对它的引用:
from Tkinter import *
class App(object):
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.optionvalue = IntVar(master)
self.optionvalue.set(2)
self.optionvalue.trace("w", self.callbackfunc)
self.optionmenu = OptionMenu(master, self.optionvalue, 1, 2, 3, 4)
self.optionmenu.pack()
self.state = []
def callbackfunc(self, *args):
self.state.append(args)
print self.state
print self.optionvalue.get()
root = Tk()
app = App(root)
root.mainloop()
运行时...
$ python foo.py
[('PY_VAR0', '', 'w')]
1
[('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w')]
2
[('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w'), ('PY_VAR0', '', 'w')]
3
你也可以使用root.getvar(name)
with name = 'PY_VAR0'
(传递给回调的第一个参数),如菜鸟古怪建议。