On 03/11/11 13:01, Chris Hare wrote:
Thanks for the advice. When I do that, I get this error
Exception in Tkinter callback
Traceback (most recent call last):
File
"/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py",
line 1410, in __call__
return self.func(*args)
TypeError: focus_set() takes exactly 1 argument (2 given)
In situations like this where the function isn't one you wrote, how to you
debug these?
Its not a bug in the function, its a bug in your use of bind().
bind() assumes that the function you are binding takes two arguments:
self and the event. This is different to the function assigned to a
command parameter which only takes a single (self) argument.
So if you want to use a built-in function that doesn't match what bind
expects (either more or less arguments) you need to provide a wrapper.
Usually this will be in the form of a lambda:
Where the function is short of args:
self.list.bind("<Button-1>",
lambda e: the_builtin() ) # drop the event
Where the function needs extra args:
self.list.bind("<Button-1>",
lambda e: aBuiltIn(e, def1, def2) ) ) # supply defaults
However if you are the creator of the method - as seems to be true here
- you just change the signature of your function/method to take two args
(and possibly ignore the event).
def myMethod(self, e=None) # just ignore e if you don't need it
# ...
self.list.bind("<Button-1>", self.myMethod )
HTH,
--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor