widget.bind('<Button-1>',callback) # binding
def callback(self,event)
#do something
Я должен передать аргумент callback()
. Аргументом является объект словаря.
Вы можете использовать лямбда
для определения анонимной функции, например:
data={"one": 1, "two": 2}
widget.bind("<ButtonPress-1>", lambda event, arg=data: self.on_mouse_down(event, arg))
Обратите внимание, что переданный arg
становится обычным аргументом, который вы используете так же, как и все другие аргументы. :
def on_mouse_down(self, event, arg):
print(arg)
А как насчет
import functools
def callback(self, event, param):
pass
arg = 123
widget.bind("", functools.partial(callback, param=arg))
Я думаю, что в большинстве случаев вам не нужен аргумент для обратного вызова, потому что обратный вызов может быть методом экземпляра, который может обращаться к членам экземпляра:
from Tkinter import *
class MyObj:
def __init__(self, arg):
self.arg = arg
def callback(self, event):
print self.arg
obj = MyObj('I am Obj')
root = Tk()
btn=Button(root, text="Click")
btn.bind('<Button-1>', obj.callback)
btn.pack()
root.mainloop()
Но я думаю, что решение functools, предложенное Филиппом, тоже очень хорошее