import W import Wkeys import string from math import * w = W.Window((148,246), "Calculator") w.display = W.EditText((4,4,-4,22), "0", fontsettings=("geneva",0,12,(0,0,0))) clearkey = '\033' okkeys = ("0123456789c=+-*/() " + Wkeys.backspacekey + Wkeys.deletekey + Wkeys.returnkey + Wkeys.enterkey + string.join(Wkeys.arrowkeys) + clearkey) def blockkey(char, event): if char not in okkeys: return 1 else: return 0 w.bind('', blockkey) def do_clear(): w.display.set("0") w.display.selectall() def do_eval(): expr = w.display.get() try: out = str(eval(expr)) w.display.set(out) w.display.setselection(len(out),len(out)) except ZeroDivisionError, what: w.display.set("Division by zero") w.display.selectall() except SyntaxError, what: w.display.set("Invalid expression") w.display.selectall() except OverflowError, what: w.display.set("Number too large") w.display.selectall() buttons = [[("(", "leftpar"), (")", "rightpar"), ("pi", "pi"), ("**", "pow")], [("sin", "sin"), ("cos", "cos"), ("tan", "tan"), ("/", "divide")], [("7", "seven"), ("8", "eight"), ("9", "nine"), ("*", "times")], [("4", "four"), ("5", "five"), ("6", "six"), ("-", "minus")], [("1", "one"), ("2", "two"), ("3", "three"), ("+", "plus")], [("0", "zero"), (".", "point"), ("C", "clear"), ("=", "eval")]] for i in range(len(buttons)): for j in range(len(buttons[i])): char, symbol = buttons[i][j] if char != "C" and char != "=": w[symbol] = W.Button((4+36*j,30+36*i,32,32), char, lambda x=char: w.display.insert(x)) w.bind(char, w[symbol].push) elif char is "C": w.clear = W.Button((4+36*j,30+36*i,32,32), "C", do_clear) w.bind('c', w.clear.push) w.bind('shiftC', w.clear.push) w.bind(clearkey, w.clear.push) elif char is "=": w.eval = W.Button((4+36*j,30+36*i,32,32), "=", do_eval) w.bind('=', w.eval.push) w.open()