Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # guicalc.py - a Python calculator
- from Tkinter import *
- # the main class
- class Calc():
- def __init__(self):
- self.total = 0
- self.current = ""
- self.new_num = True
- self.op_pending = False
- self.op = ""
- self.eq_flag = False
- def num_press(self, num):
- temp = text_box.get()
- self.eq_flag = False
- temp2 = str(num)
- if self.new_num == True:
- self.current = temp2
- self.new_num = False
- else:
- if temp2 == '.':
- if temp2 in temp:
- return
- self.current = temp + temp2
- text_box.delete(0, END)
- text_box.insert(0, self.current)
- def calc_total(self):
- if self.op_pending == True:
- self.do_sum()
- self.op_pending = False
- def do_sum(self):
- self.current = float(self.current)
- if self.op == "add":
- self.total += self.current
- if self.op == "minus":
- self.total -= self.current
- if self.op == "times":
- self.total *= self.current
- if self.op == "divide":
- self.total /= self.current
- text_box.delete(0, END)
- text_box.insert(0, self.total)
- self.new_num = True
- def operation(self, op):
- if self.op_pending == True:
- self.do_sum()
- self.op = op
- else:
- self.op_pending = True
- if self.eq_flag == False:
- self.total = float(text_box.get())
- else:
- self.total = self.current
- self.new_num = True
- self.op = op
- self.eq_flag = False
- def cancel(self):
- text_box.delete(0, END)
- text_box.insert(0, "0")
- self.new_num = True
- def all_cancel(self):
- self.cancel()
- self.total = 0
- def sign(self):
- self.current = -(float(text_box.get()))
- text_box.delete(0, END)
- text_box.insert(0, self.current)
- class My_Btn(Button):
- def btn_cmd(self, num):
- self["command"] = lambda: sum1.num_press(num)
- sum1 = Calc()
- root = Tk()
- calc = Frame(root)
- calc.grid()
- root.title("Calculator")
- text_box = Entry(calc, justify=RIGHT)
- text_box.grid(row = 0, column = 0, columnspan = 3, pady = 5)
- text_box.insert(0, "0")
- # make the buttons
- numbers = "789456123"
- i = 0
- bttn = []
- for j in range(1,4):
- for k in range(3):
- bttn.append(My_Btn(calc, text = numbers[i]))
- bttn[i].grid(row = j, column = k, pady = 5)
- bttn[i].btn_cmd(numbers[i])
- i += 1
- bttn_0 = Button(calc, text = "0")
- bttn_0["command"] = lambda: sum1.num_press(0)
- bttn_0.grid(row = 4, column = 1, pady = 5)
- bttn_div = Button(calc, text = chr(247))
- bttn_div["command"] = lambda: sum1.operation("divide")
- bttn_div.grid(row = 1, column = 3, pady = 5)
- bttn_mult = Button(calc, text = "x")
- bttn_mult["command"] = lambda: sum1.operation("times")
- bttn_mult.grid(row = 2, column = 3, pady = 5)
- minus = Button(calc, text = "-")
- minus["command"] = lambda: sum1.operation("minus")
- minus.grid(row = 3, column = 3, pady = 5)
- point = Button(calc, text = ".")
- point["command"] = lambda: sum1.num_press(".")
- point.grid(row = 4, column = 0, pady = 5)
- add = Button(calc, text = "+")
- add["command"] = lambda: sum1.operation("add")
- add.grid(row = 4, column = 3, pady = 5)
- neg= Button(calc, text = "+/-")
- neg["command"] = sum1.sign
- neg.grid(row = 5, column = 0, pady = 5)
- clear = Button(calc, text = "C")
- clear["command"] = sum1.cancel
- clear.grid(row = 5, column = 1, pady = 5)
- all_clear = Button(calc, text = "AC")
- all_clear["command"] = sum1.all_cancel
- all_clear.grid(row = 5, column = 2, pady = 5)
- equals = Button(calc, text = "=")
- equals["command"] = sum1.calc_total
- equals.grid(row = 5, column = 3, pady = 5)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement