
eric.brunel at pragmadev
Feb 12, 2002, 3:03 AM
Post #4 of 5
(589 views)
Permalink
|
|
Is it possible to call a function from a Tkinter widget.bind and include args???
[In reply to]
|
|
Hi, G. Willoughby wrote: > Is it possible to call a function from a Tkinter widget.bind and include > args??? > i.e. i want to do something like this: > > def printButtonAndCoords(event, button): > print "you rolled over %s and coords are %d:%d" % button, event.x, > eventy > > Button1.bind("<Enter>", printButtonAndCoords("button1")) > Button2.bind("<Enter>", printButtonAndCoords("button2")) > > is this possible??? Since you didn't mention your Python version, maybe the lambda stuff provided by Martin and Fredrik won't work (with pre-2.0 versions, the lambda may not have the printButtonAndCoords function in its namespace, isn't it?). So here is another solution I used quite a lot. with pre-2.0 Python It involves the creation of a callback class: class GenericCallback: def __init__(self, callback, *firstArgs): self.__callback = callback self.__firstArgs = firstArgs def __call__(self, *lastArgs): apply(self.__callback, self.__firstArgs + lastArgs) Then you make your binding like follows: Button1.bind("<Enter>", GenericCallback(printButtonAndCoords, "button1")) Your printButtonAndCoords function should then take the string as first argument and the Tkinter event as second. The binding will "call" the instance of GenericCallback, i.e. call its __call__ method, which will in turn call printButtonAndCoords with the arguments provided in the constructor, then in the actual call. The GenericCallback class is also generic enough to have many other uses (in fact everywhere you must provide a function). HTH - eric -
|