Guest User

Untitled

a guest
Feb 4th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 12.35 KB | None | 0 0
  1. from tkinter import *
  2. import re
  3. from math import *
  4.  
  5.  
  6. class Calculator:
  7.  
  8.     def __init__(self, master):
  9.         self.write_area = Entry(master, justify=RIGHT)
  10.         self.write_area.grid(row=0, columnspan=6, sticky=W + E, ipady=6, pady=6)
  11.  
  12.         self.scrollbarY = Scrollbar(master, orient=VERTICAL, command=self.score_area_yview)
  13.         self.scrollbarY.grid(row=1, rowspan=4, column=7, sticky=N + S)
  14.         self.scrollbarX = Scrollbar(master, orient=HORIZONTAL, command=self.score_area_xview)
  15.         self.scrollbarX.grid(row=5, column=6, sticky=W+E)
  16.  
  17.         self.score_area = Text(master, width=40, height=10, wrap=NONE)
  18.         self.score_area.grid(row=1, rowspan=4, column=6)
  19.         self.score_area['yscrollcommand'] = self.scrollbarY.set
  20.         self.score_area['xscrollcommand'] = self.scrollbarX.set
  21.  
  22.         self.score_area_text = Label(master, text="The result is:").grid(row=0, column=6, sticky=W + E)
  23.  
  24.         self.type = Label(master, text="Simple version").grid(row=5, column=0, columnspan=6)
  25.  
  26.         self.button7 = Button(text="7", height=2, width=8, command=lambda: self.write_area.insert(END, "7"))
  27.         self.button7.grid(column=0, row=1)
  28.         self.button8 = Button(text="8", height=2, width=8, command=lambda: self.write_area.insert(END, "8"))
  29.         self.button8.grid(row=1, column=1)
  30.         self.button9 = Button(text="9", height=2, width=8, command=lambda: self.write_area.insert(END, "9"))
  31.         self.button9.grid(row=1, column=2)
  32.         self.buttonPlus = Button(text="+", height=2, width=8, command=lambda: self.write_area.insert(END, "+"))
  33.         self.buttonPlus.grid(row=1, column=3)
  34.         self.buttonSquare = Button(text="x²", height=2, width=8, command=self.square)
  35.         self.buttonSquare.grid(row=1, column=4)
  36.         self.buttonC = Button(text="C", height=2, width=8, command=lambda: self.write_area.delete(0, END))
  37.         self.buttonC.grid(row=2, column=5)
  38.         self.button4 = Button(text="4", height=2, width=8, command=lambda: self.write_area.insert(END, "4"))
  39.         self.button4.grid(row=2, column=0)
  40.         self.button5 = Button(text="5", height=2, width=8, command=lambda: self.write_area.insert(END, "5"))
  41.         self.button5.grid(row=2, column=1)
  42.         self.button6 = Button(text="6", height=2, width=8, command=lambda: self.write_area.insert(END, "6"))
  43.         self.button6.grid(row=2, column=2)
  44.         self.buttonMinus = Button(text="-", height=2, width=8, command=lambda: self.write_area.insert(END, "-"))
  45.         self.buttonMinus.grid(row=2, column=3)
  46.         self.buttonSqrt = Button(text="√", height=2, width=8, command=self.sqrt).grid(row=2, column=4)
  47.         self.buttonBackspace = Button(text="←", height=2, width=8, command=self.clear_last)
  48.         self.buttonBackspace.grid(row=1, column=5)
  49.         self.button1 = Button(text="1", height=2, width=8, command=lambda: self.write_area.insert(END, "1"))
  50.         self.button1.grid(row=3, column=0)
  51.         self.button2 = Button(text="2", height=2, width=8, command=lambda: self.write_area.insert(END, "2"))
  52.         self.button2.grid(row=3, column=1)
  53.         self.button3 = Button(text="3", height=2, width=8, command=lambda: self.write_area.insert(END, "3"))
  54.         self.button3.grid(row=3, column=2)
  55.         self.buttonMulti = Button(text="*", height=2, width=8, command=lambda: self.write_area.insert(END, "*"))
  56.         self.buttonMulti.grid(row=3, column=3)
  57.         self.buttonSquareY = Button(text="xʸ", height=2, width=8, command=self.squareY).grid(row=3, column=4)
  58.         self.buttonCE = Button(text="CE", height=2, width=8, command=self.clear)
  59.         self.buttonCE.grid(row=3, column=5)
  60.         self.button0 = Button(text="0", height=2, width=8, command=lambda: self.write_area.insert(END, "0"))
  61.         self.button0.grid(row=4, column=1)
  62.         self.buttonDot = Button(text=".", height=2, width=8, command=lambda: self.write_area.insert(END, "."))
  63.         self.buttonDot.grid(row=4, column=0)
  64.         self.buttonEqual = Button(text="=", height=2, width=8, command=self.equal)
  65.         self.buttonEqual.grid(row=4, column=2)
  66.         self.buttonDiv = Button(text="/", height=2, width=8)
  67.         self.buttonDiv.grid(row=4, column=3)
  68.         self.buttonLeftPar = Button(text="(", height=2, width=8, command=lambda: self.write_area.insert(END, "("))
  69.         self.buttonLeftPar.grid(row=4, column=4)
  70.         self.buttonRightPar = Button(text=")", height=2, width=8, command=lambda: self.write_area.insert(END, ")"))
  71.         self.buttonRightPar.grid(row=4, column=5)
  72.  
  73.         master.bind('<BackSpace>', lambda event=None: self.change("clear"))
  74.         master.bind('<Delete>', lambda event=None: self.change("del"))
  75.         master.bind('<Return>', lambda event=None: self.change("enter"))
  76.         master.bind('=', lambda event=None: self.change("equal"))
  77.         master.bind('^', lambda event=None: self.change("square"))
  78.  
  79.         master.bind(',', lambda event=None: self.change("."))
  80.         master.bind('.', lambda event=None: self.change("."))
  81.         master.bind('+', lambda event=None: self.change("+"))
  82.         master.bind('-', lambda event=None: self.change("-"))
  83.         master.bind('*', lambda event=None: self.change("*"))
  84.         master.bind('/', lambda event=None: self.change("/"))
  85.         master.bind('(', lambda event=None: self.change("("))
  86.         master.bind(')', lambda event=None: self.change(")"))
  87.  
  88.         master.bind('0', lambda event=None: self.change(0))
  89.         master.bind('1', lambda event=None: self.change(1))
  90.         master.bind('2', lambda event=None: self.change(2))
  91.         master.bind('3', lambda event=None: self.change(3))
  92.         master.bind('4', lambda event=None: self.change(4))
  93.         master.bind('5', lambda event=None: self.change(5))
  94.         master.bind('6', lambda event=None: self.change(6))
  95.         master.bind('7', lambda event=None: self.change(7))
  96.         master.bind('8', lambda event=None: self.change(8))
  97.         master.bind('9', lambda event=None: self.change(9))
  98.  
  99.     def change(self, value):
  100.         if value == "enter" or value == "equal":
  101.             self.equal()
  102.             self.buttonEqual.config(relief=SUNKEN)
  103.             self.buttonEqual.after(120, lambda: self.buttonEqual.config(relief=RAISED))
  104.         elif value == "clear":
  105.             self.clear_last()
  106.             self.button1.config(relief=SUNKEN)
  107.             self.button1.after(120, lambda: self.button1.config(relief=RAISED))
  108.         elif value == "del":
  109.             self.clear()
  110.             self.button1.config(relief=SUNKEN)
  111.             self.button1.after(120, lambda: self.button1.config(relief=RAISED))
  112.         elif value == "square":
  113.             self.square()
  114.             self.button1.config(relief=SUNKEN)
  115.             self.button1.after(120, lambda: self.button1.config(relief=RAISED))
  116.         elif value == 1:
  117.             self.write_area.insert(END, str(value))
  118.             self.button1.config(relief=SUNKEN)
  119.             self.button1.after(120, lambda: self.button1.config(relief=RAISED))
  120.         elif value == 2:
  121.             self.write_area.insert(END, str(value))
  122.             self.button2.config(relief=SUNKEN)
  123.             self.button2.after(120, lambda: self.button2.config(relief=RAISED))
  124.         elif value == 3:
  125.             self.write_area.insert(END, str(value))
  126.             self.button3.config(relief=SUNKEN)
  127.             self.button3.after(120, lambda: self.button3.config(relief=RAISED))
  128.         elif value == 4:
  129.             self.write_area.insert(END, str(value))
  130.             self.button4.config(relief=SUNKEN)
  131.             self.button4.after(120, lambda: self.button4.config(relief=RAISED))
  132.         elif value == 5:
  133.             self.write_area.insert(END, str(value))
  134.             self.button5.config(relief=SUNKEN)
  135.             self.button5.after(120, lambda: self.button5.config(relief=RAISED))
  136.         elif value == 6:
  137.             self.write_area.insert(END, str(value))
  138.             self.button6.config(relief=SUNKEN)
  139.             self.button6.after(120, lambda: self.button6.config(relief=RAISED))
  140.         elif value == 7:
  141.             self.write_area.insert(END, str(value))
  142.             self.button7.config(relief=SUNKEN)
  143.             self.button7.after(120, lambda: self.button7.config(relief=RAISED))
  144.         elif value == 8:
  145.             self.write_area.insert(END, str(value))
  146.             self.button8.config(relief=SUNKEN)
  147.             self.button8.after(120, lambda: self.button8.config(relief=RAISED))
  148.         elif value == 9:
  149.             self.write_area.insert(END, str(value))
  150.             self.button9.config(relief=SUNKEN)
  151.             self.button9.after(120, lambda: self.button9.config(relief=RAISED))
  152.         elif value == 0:
  153.             self.write_area.insert(END, str(value))
  154.             self.button0.config(relief=SUNKEN)
  155.             self.button0.after(120, lambda: self.button0.config(relief=RAISED))
  156.         elif value == ".":
  157.             self.write_area.insert(END, value)
  158.             self.buttonDot.config(relief=SUNKEN)
  159.             self.buttonDot.after(120, lambda: self.buttonDot.config(relief=RAISED))
  160.         elif value == "-":
  161.             self.write_area.insert(END, value)
  162.             self.buttonMinus.config(relief=SUNKEN)
  163.             self.buttonMinus.after(120, lambda: self.buttonMinus.config(relief=RAISED))
  164.         elif value == "+":
  165.             self.write_area.insert(END, value)
  166.             self.buttonPlus.config(relief=SUNKEN)
  167.             self.buttonPlus.after(120, lambda: self.buttonPlus.config(relief=RAISED))
  168.         elif value == "*":
  169.             self.write_area.insert(END, value)
  170.             self.buttonMulti.config(relief=SUNKEN)
  171.             self.buttonMulti.after(120, lambda: self.buttonMulti.config(relief=RAISED))
  172.         elif value == "/":
  173.             self.write_area.insert(END, value)
  174.             self.buttonDiv.config(relief=SUNKEN)
  175.             self.buttonDiv.after(120, lambda: self.buttonDiv.config(relief=RAISED))
  176.         elif value == "(":
  177.             self.write_area.insert(END, value)
  178.             self.buttonLeftPar.config(relief=SUNKEN)
  179.             self.buttonLeftPar.after(120, lambda: self.buttonLeftPar.config(relief=RAISED))
  180.         elif value == ")":
  181.             self.write_area.insert(END, value)
  182.             self.buttonRightPar.config(relief=SUNKEN)
  183.             self.buttonRightPar.after(120, lambda: self.buttonRightPar.config(relief=RAISED))
  184.  
  185.     def score_area_yview(self, *L):
  186.         op, howMany = L[0], L[1]
  187.  
  188.         if op == 'scroll':
  189.             units = L[2]
  190.             self.score_area.yview_scroll(howMany, units)
  191.         elif op == 'moveto':
  192.             self.score_area.yview_moveto(howMany)
  193.  
  194.     def score_area_xview(self, *L):
  195.         op, howMany = L[0], L[1]
  196.  
  197.         if op == 'scroll':
  198.             units = L[2]
  199.             self.score_area.xview_scroll(howMany, units)
  200.         elif op == 'moveto':
  201.             self.score_area.xview_moveto(howMany)
  202.  
  203.     def equal(self, event=None):
  204.         equation = self.write_area.get()
  205.         self.score_area.insert(1.0, self.write_area.get() + "=" + str(eval(compile(equation, '<string>', 'eval'))) + "\n")
  206.         self.write_area.delete(0, END)
  207.         self.write_area.insert(0, str(eval(compile(equation, '<string>', 'eval'))))
  208.  
  209.  
  210.     def clear_last(self, event=None):
  211.         get_length = len(self.write_area.get())
  212.         self.write_area.delete(get_length - 1)
  213.  
  214.  
  215.     def clear(self, event=None):
  216.         self.write_area.delete(0, END)
  217.         self.score_area.delete(1.0, END)
  218.  
  219.     def square(self):
  220.         equation = self.write_area.get()
  221.         result = eval(compile(equation, '<string>', 'eval')) ** 2
  222.         self.write_area.delete(0, END)
  223.         self.write_area.insert(0, str(result))
  224.         self.score_area.insert(1.0, equation + "**2" + "=" + str(result))
  225.  
  226.     def squareY(self, event=None):
  227.         check = self.write_area.get()
  228.         check2 = re.search(r'\d+', check).span()
  229.         if len(check) == check2[1]:
  230.             self.write_area.insert(END, "**")
  231.         elif self.write_area.get()[0] == "(":
  232.             self.write_area.insert(END, "**(")
  233.         else:
  234.             self.write_area.insert(0, "(")
  235.             self.write_area.insert(END, ")**(")
  236.  
  237.     def sqrt(self):
  238.         number = eval(compile(self.write_area.get(), '<string>', 'eval'))
  239.         self.score_area.insert(1.0, "√(" + self.write_area.get() + ")=" + str(sqrt(number)) + "\n")
  240.         self.write_area.delete(0, END)
  241.         self.write_area.insert(0, str(number))
  242.  
  243.  
  244. root = Tk()
  245.  
  246. a = Calculator(root)
  247.  
  248. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment