Advertisement
Guest User

Untitled

a guest
Feb 3rd, 2018
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.45 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")).grid(
  27.             column=0, row=1)
  28.         self.button8 = Button(text="8", height=2, width=8, command=lambda: self.write_area.insert(END, "8")).grid(
  29.             row=1, column=1)
  30.         self.button9 = Button(text="9", height=2, width=8, command=lambda: self.write_area.insert(END, "9")).grid(
  31.             row=1, column=2)
  32.         self.buttonPlus = Button(text="+", height=2, width=8, command=lambda: self.write_area.insert(END, "+")).grid(
  33.             row=1, column=3)
  34.         self.buttonSquare = Button(text="x²", height=2, width=8, command=self.square).grid(row=1, column=4)
  35.         self.buttonC = Button(text="C", height=2, width=8, command=lambda: self.write_area.delete(0, END)).grid(
  36.             row=2, column=5)
  37.  
  38.         self.button4 = Button(text="4", height=2, width=8, command=lambda: self.write_area.insert(END, "4")).grid(
  39.             row=2, column=0)
  40.         self.button5 = Button(text="5", height=2, width=8, command=lambda: self.write_area.insert(END, "5")).grid(
  41.             row=2, column=1)
  42.         self.button6 = Button(text="6", height=2, width=8, command=lambda: self.write_area.insert(END, "6")).grid(
  43.             row=2, column=2)
  44.         self.buttonMinus = Button(text="-", height=2, width=8, command=lambda: self.write_area.insert(END, "-")).grid(
  45.             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).grid(row=1, column=5)
  48.  
  49.         self.button1 = Button(text="1", height=2, width=8, command=lambda: self.write_area.insert(END, "1")).grid(
  50.             row=3, column=0)
  51.         self.button2 = Button(text="2", height=2, width=8, command=lambda: self.write_area.insert(END, "2")).grid(
  52.             row=3, column=1)
  53.         self.button3 = Button(text="3", height=2, width=8, command=lambda: self.write_area.insert(END, "3")).grid(
  54.             row=3, column=2)
  55.         self.buttonMulti = Button(text="*", height=2, width=8, command=lambda: self.write_area.insert(END, "*")).grid(
  56.             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).grid(row=3, column=5)
  59.  
  60.         self.button0 = Button(text="0", height=2, width=8, command=lambda: self.write_area.insert(END, "0")).grid(
  61.             row=4, column=1)
  62.         self.buttonDot = Button(text=".", height=2, width=8, command=lambda: self.write_area.insert(END, ".")).grid(
  63.             row=4, column=0)
  64.         self.buttonEqual = Button(text="=", height=2, width=8, command=self.equal).grid(row=4, column=2)
  65.         self.buttonDiv = Button(text="/", height=2, width=8).grid(row=4, column=3)
  66.         self.buttonLeftPar = Button(text="(", height=2, width=8, command=lambda: self.write_area.insert(END, "(")).grid(
  67.             row=4, column=4)
  68.         self.buttonRightPar = Button(text=")", height=2, width=8, command=lambda: self.write_area.insert(END, ")")).\
  69.             grid(row=4, column=5)
  70.         master.bind('<BackSpace>', self.clear_last)
  71.         master.bind('<Delete>', self.clear)
  72.         master.bind('<KP_Enter>', self.equal)
  73.  
  74.  
  75.     def score_area_yview(self, *L):
  76.         op, howMany = L[0], L[1]
  77.  
  78.         if op == 'scroll':
  79.             units = L[2]
  80.             self.score_area.yview_scroll(howMany, units)
  81.         elif op == 'moveto':
  82.             self.score_area.yview_moveto(howMany)
  83.  
  84.     def score_area_xview(self, *L):
  85.         op, howMany = L[0], L[1]
  86.  
  87.         if op == 'scroll':
  88.             units = L[2]
  89.             self.score_area.xview_scroll(howMany, units)
  90.         elif op == 'moveto':
  91.             self.score_area.xview_moveto(howMany)
  92.  
  93.     def equal(self, event=None):
  94.         equation = self.write_area.get()
  95.         self.score_area.insert(1.0, self.write_area.get() + "=" + str(eval(compile(equation, '<string>', 'eval'))) + "\n")
  96.         self.write_area.delete(0, END)
  97.         self.write_area.insert(0, str(eval(compile(equation, '<string>', 'eval'))))
  98.  
  99.  
  100.     def clear_last(self, event=None):
  101.         get_length = len(self.write_area.get())
  102.         self.write_area.delete(get_length - 1)
  103.  
  104.  
  105.     def clear(self, event=None):
  106.         self.write_area.delete(0, END)
  107.         self.score_area.delete(1.0, END)
  108.  
  109.     def square(self):
  110.         equation = self.write_area.get()
  111.         result = eval(compile(equation, '<string>', 'eval')) ** 2
  112.         self.write_area.delete(0, END)
  113.         self.write_area.insert(0, str(result))
  114.         self.score_area.insert(1.0, equation + "**2" + "=" + str(result))
  115.  
  116.     def squareY(self):
  117.         check = self.write_area.get()
  118.         check2 = re.search(r'\d+', check).span()
  119.         if len(check) == check2[1]:
  120.             self.write_area.insert(END, "**")
  121.         elif self.write_area.get()[0] == "(":
  122.             self.write_area.insert(END, "**(")
  123.         else:
  124.             self.write_area.insert(0, "(")
  125.             self.write_area.insert(END, ")**(")
  126.  
  127.     def sqrt(self):
  128.         number = eval(compile(self.write_area.get(), '<string>', 'eval'))
  129.         self.score_area.insert(1.0, "√(" + self.write_area.get() + ")=" + str(sqrt(number)) + "\n")
  130.         self.write_area.delete(0, END)
  131.         self.write_area.insert(0, str(number))
  132.  
  133. root = Tk()
  134.  
  135. a = Calculator(root)
  136.  
  137. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement