Advertisement
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")).grid(
- column=0, row=1)
- self.button8 = Button(text="8", height=2, width=8, command=lambda: self.write_area.insert(END, "8")).grid(
- row=1, column=1)
- self.button9 = Button(text="9", height=2, width=8, command=lambda: self.write_area.insert(END, "9")).grid(
- row=1, column=2)
- self.buttonPlus = Button(text="+", height=2, width=8, command=lambda: self.write_area.insert(END, "+")).grid(
- row=1, column=3)
- self.buttonSquare = Button(text="x²", height=2, width=8, command=self.square).grid(row=1, column=4)
- self.buttonC = Button(text="C", height=2, width=8, command=lambda: self.write_area.delete(0, END)).grid(
- row=2, column=5)
- self.button4 = Button(text="4", height=2, width=8, command=lambda: self.write_area.insert(END, "4")).grid(
- row=2, column=0)
- self.button5 = Button(text="5", height=2, width=8, command=lambda: self.write_area.insert(END, "5")).grid(
- row=2, column=1)
- self.button6 = Button(text="6", height=2, width=8, command=lambda: self.write_area.insert(END, "6")).grid(
- row=2, column=2)
- self.buttonMinus = Button(text="-", height=2, width=8, command=lambda: self.write_area.insert(END, "-")).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).grid(row=1, column=5)
- self.button1 = Button(text="1", height=2, width=8, command=lambda: self.write_area.insert(END, "1")).grid(
- row=3, column=0)
- self.button2 = Button(text="2", height=2, width=8, command=lambda: self.write_area.insert(END, "2")).grid(
- row=3, column=1)
- self.button3 = Button(text="3", height=2, width=8, command=lambda: self.write_area.insert(END, "3")).grid(
- row=3, column=2)
- self.buttonMulti = Button(text="*", height=2, width=8, command=lambda: self.write_area.insert(END, "*")).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).grid(row=3, column=5)
- self.button0 = Button(text="0", height=2, width=8, command=lambda: self.write_area.insert(END, "0")).grid(
- row=4, column=1)
- self.buttonDot = Button(text=".", height=2, width=8, command=lambda: self.write_area.insert(END, ".")).grid(
- row=4, column=0)
- self.buttonEqual = Button(text="=", height=2, width=8, command=self.equal).grid(row=4, column=2)
- self.buttonDiv = Button(text="/", height=2, width=8).grid(row=4, column=3)
- self.buttonLeftPar = Button(text="(", height=2, width=8, command=lambda: self.write_area.insert(END, "(")).grid(
- row=4, column=4)
- self.buttonRightPar = Button(text=")", height=2, width=8, command=lambda: self.write_area.insert(END, ")")).\
- grid(row=4, column=5)
- master.bind('<BackSpace>', self.clear_last)
- master.bind('<Delete>', self.clear)
- master.bind('<KP_Enter>', self.equal)
- 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):
- 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
Advertisement