Немного неясно, что вы подразумеваете под "передачей параметров моей функции обратного вызова". Вы уже делаете это! Например:
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)
с name = 'PY_VAR0'
(первый аргумент, переданный обратному вызову), как подсказывает noob oddy .