Hi Joe, On Tue, 31 Oct 2006 18:37:27 -0800 "Joe Cox" <[EMAIL PROTECTED]> wrote:
> I found this simple calculator on the web: > > from Tkinter import * > from math import * > ###http://sunsite.uakom.sk/sunworldonline/swol-02-1998/swol-02-python.htmlBy > Cameron Laird and Kathryn Soraiz...Getting Started with Python### > > def evaluate(event): > label['text'] = "Result: " + str(eval(expression.get())) > > frame = Frame(None) > > entry = Entry(frame) > entry['textvariable'] = expression = StringVar() > entry.bind("", evaluate) > > label = Label(frame) > > button = Button(frame, text = "Submit", command = evaluate) > > frame.pack() > entry.pack() > label.pack() > button.pack() > frame.mainloop() > > I get this: > > >>> Traceback (most recent call last): > File > "D:\Python24\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", > line 310, in RunScript > exec codeObject in __main__.__dict__ > File "D:\Python24\Calculator\Calc.py", line 12, in ? > entry.bind("", evaluate) > File "D:\Python24\lib\lib-tk\Tkinter.py", line 933, in bind > return self._bind(('bind', self._w), sequence, func, add) > File "D:\Python24\lib\lib-tk\Tkinter.py", line 888, in _bind > self.tk.call(what + (sequence, cmd)) > TclError: no events specified in binding > this code seems to be quite old, so I guess that the line entry.bind("", evaluate) used to be legal in older version of Tk. I don't know what it is supposed to do, though. Maybe there was some default event defined for such cases. In today's Tk you need to specify an event sequence the callback should be bound to, like entry.bind("<Any-KeyRelease>", evaluate) This does not work either, because you will get a syntax error on "incomplete" expressions like "3*" when trying to type in "3*3" , so the evaluate() callback will have to catch this syntax error: def evaluate(event): try: label['text'] = "Result: " + str(eval(expression.get())) except SyntaxError: pass This still does not work, when you press the "submit" button you get: Traceback (most recent call last): File "/usr/lib/python2.4/lib-tk/Tkinter.py", line 1345, in __call__ return self.func(*args) TypeError: evaluate() takes exactly 1 argument (0 given) so the constructor must be changed like: def evaluate(event=None): (...) because the Tkinter.Button's "command" callback is called without any arguments (again I don't know if this was different in old Tk versions). With these changes at least the few simple examples I tried seem to work. I hope this helps Michael _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor