Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tkinter import *
- import re
- from math import *
- class Calculator:
- def __init__(self, master):
- self.write_area = Entry(master, justify=RIGHT)
- self.write_area.grid(row=0, columnspan=6, sticky=W + E, ipady=6, pady=6)
- self.scrollbarY = Scrollbar(master, orient=VERTICAL, command=self.score_area_yview)
- self.scrollbarY.grid(row=1, rowspan=4, column=7, sticky=N + S)
- self.scrollbarX = Scrollbar(master, orient=HORIZONTAL, command=self.score_area_xview)
- self.scrollbarX.grid(row=5, column=6, sticky=W+E)
- self.score_area = Text(master, width=40, height=10, wrap=NONE)
- self.score_area.grid(row=1, rowspan=4, column=6)
- self.score_area['yscrollcommand'] = self.scrollbarY.set
- self.score_area['xscrollcommand'] = self.scrollbarX.set
- self.score_area_text = Label(master, text="The result is:").grid(row=0, column=6, sticky=W + E)
- self.type = Label(master, text="Simple version").grid(row=5, column=0, columnspan=6)
- self.button7 = Button(text="7", height=2, width=8, command=lambda: self.write_area.insert(END, "7"))
- self.button7.grid(column=0, row=1)
- self.button8 = Button(text="8", height=2, width=8, command=lambda: self.write_area.insert(END, "8"))
- self.button8.grid(row=1, column=1)
- self.button9 = Button(text="9", height=2, width=8, command=lambda: self.write_area.insert(END, "9"))
- self.button9.grid(row=1, column=2)
- self.buttonPlus = Button(text="+", height=2, width=8, command=lambda: self.write_area.insert(END, "+"))
- self.buttonPlus.grid(row=1, column=3)
- self.buttonSquare = Button(text="x²", height=2, width=8, command=self.square)
- self.buttonSquare.grid(row=1, column=4)
- self.buttonC = Button(text="C", height=2, width=8, command=lambda: self.write_area.delete(0, END))
- self.buttonC.grid(row=2, column=5)
- self.button4 = Button(text="4", height=2, width=8, command=lambda: self.write_area.insert(END, "4"))
- self.button4.grid(row=2, column=0)
- self.button5 = Button(text="5", height=2, width=8, command=lambda: self.write_area.insert(END, "5"))
- self.button5.grid(row=2, column=1)
- self.button6 = Button(text="6", height=2, width=8, command=lambda: self.write_area.insert(END, "6"))
- self.button6.grid(row=2, column=2)
- self.buttonMinus = Button(text="-", height=2, width=8, command=lambda: self.write_area.insert(END, "-"))
- self.buttonMinus.grid(row=2, column=3)
- self.buttonSqrt = Button(text="√", height=2, width=8, command=self.sqrt).grid(row=2, column=4)
- self.buttonBackspace = Button(text="←", height=2, width=8, command=self.clear_last)
- self.buttonBackspace.grid(row=1, column=5)
- self.button1 = Button(text="1", height=2, width=8, command=lambda: self.write_area.insert(END, "1"))
- self.button1.grid(row=3, column=0)
- self.button2 = Button(text="2", height=2, width=8, command=lambda: self.write_area.insert(END, "2"))
- self.button2.grid(row=3, column=1)
- self.button3 = Button(text="3", height=2, width=8, command=lambda: self.write_area.insert(END, "3"))
- self.button3.grid(row=3, column=2)
- self.buttonMulti = Button(text="*", height=2, width=8, command=lambda: self.write_area.insert(END, "*"))
- self.buttonMulti.grid(row=3, column=3)
- self.buttonSquareY = Button(text="xʸ", height=2, width=8, command=self.squareY).grid(row=3, column=4)
- self.buttonCE = Button(text="CE", height=2, width=8, command=self.clear)
- self.buttonCE.grid(row=3, column=5)
- self.button0 = Button(text="0", height=2, width=8, command=lambda: self.write_area.insert(END, "0"))
- self.button0.grid(row=4, column=1)
- self.buttonDot = Button(text=".", height=2, width=8, command=lambda: self.write_area.insert(END, "."))
- self.buttonDot.grid(row=4, column=0)
- self.buttonEqual = Button(text="=", height=2, width=8, command=self.equal)
- self.buttonEqual.grid(row=4, column=2)
- self.buttonDiv = Button(text="/", height=2, width=8)
- self.buttonDiv.grid(row=4, column=3)
- self.buttonLeftPar = Button(text="(", height=2, width=8, command=lambda: self.write_area.insert(END, "("))
- self.buttonLeftPar.grid(row=4, column=4)
- self.buttonRightPar = Button(text=")", height=2, width=8, command=lambda: self.write_area.insert(END, ")"))
- self.buttonRightPar.grid(row=4, column=5)
- master.bind('<BackSpace>', lambda event=None: self.change("clear"))
- master.bind('<Delete>', lambda event=None: self.change("del"))
- master.bind('<Return>', lambda event=None: self.change("enter"))
- master.bind('=', lambda event=None: self.change("equal"))
- master.bind('^', lambda event=None: self.change("square"))
- master.bind(',', lambda event=None: self.change("."))
- master.bind('.', lambda event=None: self.change("."))
- master.bind('+', lambda event=None: self.change("+"))
- master.bind('-', lambda event=None: self.change("-"))
- master.bind('*', lambda event=None: self.change("*"))
- master.bind('/', lambda event=None: self.change("/"))
- master.bind('(', lambda event=None: self.change("("))
- master.bind(')', lambda event=None: self.change(")"))
- master.bind('0', lambda event=None: self.change(0))
- master.bind('1', lambda event=None: self.change(1))
- master.bind('2', lambda event=None: self.change(2))
- master.bind('3', lambda event=None: self.change(3))
- master.bind('4', lambda event=None: self.change(4))
- master.bind('5', lambda event=None: self.change(5))
- master.bind('6', lambda event=None: self.change(6))
- master.bind('7', lambda event=None: self.change(7))
- master.bind('8', lambda event=None: self.change(8))
- master.bind('9', lambda event=None: self.change(9))
- def change(self, value):
- if value == "enter" or value == "equal":
- self.equal()
- self.buttonEqual.config(relief=SUNKEN)
- self.buttonEqual.after(120, lambda: self.buttonEqual.config(relief=RAISED))
- elif value == "clear":
- self.clear_last()
- self.button1.config(relief=SUNKEN)
- self.button1.after(120, lambda: self.button1.config(relief=RAISED))
- elif value == "del":
- self.clear()
- self.button1.config(relief=SUNKEN)
- self.button1.after(120, lambda: self.button1.config(relief=RAISED))
- elif value == "square":
- self.square()
- self.button1.config(relief=SUNKEN)
- self.button1.after(120, lambda: self.button1.config(relief=RAISED))
- elif value == 1:
- self.write_area.insert(END, str(value))
- self.button1.config(relief=SUNKEN)
- self.button1.after(120, lambda: self.button1.config(relief=RAISED))
- elif value == 2:
- self.write_area.insert(END, str(value))
- self.button2.config(relief=SUNKEN)
- self.button2.after(120, lambda: self.button2.config(relief=RAISED))
- elif value == 3:
- self.write_area.insert(END, str(value))
- self.button3.config(relief=SUNKEN)
- self.button3.after(120, lambda: self.button3.config(relief=RAISED))
- elif value == 4:
- self.write_area.insert(END, str(value))
- self.button4.config(relief=SUNKEN)
- self.button4.after(120, lambda: self.button4.config(relief=RAISED))
- elif value == 5:
- self.write_area.insert(END, str(value))
- self.button5.config(relief=SUNKEN)
- self.button5.after(120, lambda: self.button5.config(relief=RAISED))
- elif value == 6:
- self.write_area.insert(END, str(value))
- self.button6.config(relief=SUNKEN)
- self.button6.after(120, lambda: self.button6.config(relief=RAISED))
- elif value == 7:
- self.write_area.insert(END, str(value))
- self.button7.config(relief=SUNKEN)
- self.button7.after(120, lambda: self.button7.config(relief=RAISED))
- elif value == 8:
- self.write_area.insert(END, str(value))
- self.button8.config(relief=SUNKEN)
- self.button8.after(120, lambda: self.button8.config(relief=RAISED))
- elif value == 9:
- self.write_area.insert(END, str(value))
- self.button9.config(relief=SUNKEN)
- self.button9.after(120, lambda: self.button9.config(relief=RAISED))
- elif value == 0:
- self.write_area.insert(END, str(value))
- self.button0.config(relief=SUNKEN)
- self.button0.after(120, lambda: self.button0.config(relief=RAISED))
- elif value == ".":
- self.write_area.insert(END, value)
- self.buttonDot.config(relief=SUNKEN)
- self.buttonDot.after(120, lambda: self.buttonDot.config(relief=RAISED))
- elif value == "-":
- self.write_area.insert(END, value)
- self.buttonMinus.config(relief=SUNKEN)
- self.buttonMinus.after(120, lambda: self.buttonMinus.config(relief=RAISED))
- elif value == "+":
- self.write_area.insert(END, value)
- self.buttonPlus.config(relief=SUNKEN)
- self.buttonPlus.after(120, lambda: self.buttonPlus.config(relief=RAISED))
- elif value == "*":
- self.write_area.insert(END, value)
- self.buttonMulti.config(relief=SUNKEN)
- self.buttonMulti.after(120, lambda: self.buttonMulti.config(relief=RAISED))
- elif value == "/":
- self.write_area.insert(END, value)
- self.buttonDiv.config(relief=SUNKEN)
- self.buttonDiv.after(120, lambda: self.buttonDiv.config(relief=RAISED))
- elif value == "(":
- self.write_area.insert(END, value)
- self.buttonLeftPar.config(relief=SUNKEN)
- self.buttonLeftPar.after(120, lambda: self.buttonLeftPar.config(relief=RAISED))
- elif value == ")":
- self.write_area.insert(END, value)
- self.buttonRightPar.config(relief=SUNKEN)
- self.buttonRightPar.after(120, lambda: self.buttonRightPar.config(relief=RAISED))
- def score_area_yview(self, *L):
- op, howMany = L[0], L[1]
- if op == 'scroll':
- units = L[2]
- self.score_area.yview_scroll(howMany, units)
- elif op == 'moveto':
- self.score_area.yview_moveto(howMany)
- def score_area_xview(self, *L):
- op, howMany = L[0], L[1]
- if op == 'scroll':
- units = L[2]
- self.score_area.xview_scroll(howMany, units)
- elif op == 'moveto':
- self.score_area.xview_moveto(howMany)
- def equal(self, event=None):
- equation = self.write_area.get()
- self.score_area.insert(1.0, self.write_area.get() + "=" + str(eval(compile(equation, '<string>', 'eval'))) + "\n")
- self.write_area.delete(0, END)
- self.write_area.insert(0, str(eval(compile(equation, '<string>', 'eval'))))
- def clear_last(self, event=None):
- get_length = len(self.write_area.get())
- self.write_area.delete(get_length - 1)
- def clear(self, event=None):
- self.write_area.delete(0, END)
- self.score_area.delete(1.0, END)
- def square(self):
- equation = self.write_area.get()
- result = eval(compile(equation, '<string>', 'eval')) ** 2
- self.write_area.delete(0, END)
- self.write_area.insert(0, str(result))
- self.score_area.insert(1.0, equation + "**2" + "=" + str(result))
- def squareY(self, event=None):
- check = self.write_area.get()
- check2 = re.search(r'\d+', check).span()
- if len(check) == check2[1]:
- self.write_area.insert(END, "**")
- elif self.write_area.get()[0] == "(":
- self.write_area.insert(END, "**(")
- else:
- self.write_area.insert(0, "(")
- self.write_area.insert(END, ")**(")
- def sqrt(self):
- number = eval(compile(self.write_area.get(), '<string>', 'eval'))
- self.score_area.insert(1.0, "√(" + self.write_area.get() + ")=" + str(sqrt(number)) + "\n")
- self.write_area.delete(0, END)
- self.write_area.insert(0, str(number))
- root = Tk()
- a = Calculator(root)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment