[Tkinter-discuss] No Parameters fo Callback functions?

Fredrik Lundh fredrik at pythonware.com
Fri Nov 4 10:28:27 CET 2005

Martin Franklin wrote:

> The 'standard alternative' to lambda is to use a callback class
> like so :)
> class Callback:
>      def __init__(self, checkbutton, action):
>          self.checkbutton = checkbutton
>          self.action = action
>      def __call__(self):
>          self.action(self.checkbutton)

I strongly recommend using local function objects instead; the code
is straightforward, they're cheap to create, and they give you a lot
more flexibility the day you need to add more functionality to your

    def callback():
    cb1 = Checkbutton(self, command=callback)

    def callback():
    cb2 = Checkbutton(self, command=callback)

or, in a loop

    # create ten buttons
    for i in range(10):
        def callback(i=i): # <-- note: bind to value, not name
            self.actionFunction("checkButton%d" % i)
        cb = Checkbutton(self, text="Button %d" % i, command=callback)

(the i=i construct is used to bind to the *current* value of the i
variable, rather than whatever value it has when you leave the
current scope)


More information about the Tkinter-discuss mailing list