Facebook
From Alexander Stepanov, 3 Years ago, written in Python.
This paste is a reply to tainted calculator from Alexander Stepanov - view diff
Embed
Download Paste or View Raw
Hits: 120
  1. from tkinter import *
  2. from tkinter.messagebox import showinfo
  3. from tkinter.scrolledtext import ScrolledText
  4.  
  5. root = Tk()
  6.  
  7.  
  8.  
  9. class Calculator:
  10.  
  11.     def __init__(self):
  12.         self.rows = 2
  13.         self.cols = 1
  14.         self.deleteall = None
  15.         self.wid = 10
  16.         self.heigh = 5
  17.         self.lists = ['/', '*', '-', '+']
  18.         self.txt = None
  19.         self.makeWidgets()
  20.  
  21.     def makeWidgets(self):
  22.         self.txt = ScrolledText(root, width=self.wid, height=1, font=('Arial Black', 50), wrap=WORD, state=DISABLED)
  23.         self.txt.grid(row=0, column=1, columnspan=5)
  24.         root.bind('<Right>', self.tab)
  25.         self.deleteall = Button(root, text='AC', height=self.heigh, width=self.wid, highlightbackground='blue',
  26.                                 command=self.delete_all)
  27.         self.deleteall.grid(row=1, column=1)
  28.         change = Button(root, text='+/-', height=self.heigh, width=self.wid, highlightbackground='blue',
  29.                         command=self.minus_plus)
  30.         change.grid(row=1, column=2)
  31.         percent = Button(root, text='%', height=self.heigh, width=self.wid, highlightbackground='blue',
  32.                          command=self.per_cent)
  33.         percent.grid(row=1, column=3)
  34.         for i in range(1, 10):
  35.             btn = Button(root, text=i, height=self.heigh, width=self.wid, highlightbackground='blue',
  36.                          command=lambda i=i: self.add(i))
  37.             if i % 3 == 0:
  38.                 btn.grid(row=self.rows, column=self.cols)
  39.                 self.rows += 1
  40.                 self.cols = 1
  41.             else:
  42.                 btn.grid(row=self.rows, column=self.cols)
  43.                 self.cols += 1
  44.         zero = Button(root, text='0', height=self.heigh, width=self.wid, highlightbackground='blue',
  45.                       command=lambda: self.add('0'))
  46.         zero.grid(row=5, column=1)
  47.         comma = Button(root, text=',', height=self.heigh, width=self.wid, highlightbackground='blue',
  48.                        command=lambda: self.add('.'))
  49.         comma.grid(row=5, column=2)
  50.         gap = Button(root, height=self.heigh, width=self.wid, highlightbackground='blue')
  51.         gap.grid(row=5, column=3)
  52.         a = 1
  53.         for j in self.lists:
  54.             sign = Button(root, text=j, width=self.wid, height=self.heigh, fg='black', highlightbackground='red',
  55.                           command=lambda j=j: self.add(j))
  56.             sign.grid(row=a, column=4)
  57.             a += 1
  58.         sumsign = Button(root, text='=', width=self.wid, height=self.heigh, highlightbackground='red',
  59.                          command=self.isum)
  60.         sumsign.grid(row=5, column=4)
  61.  
  62.     def add(self, num):
  63.         self.txt.config(state=NORMAL)
  64.         self.txt.insert(INSERT, num)
  65.         self.txt.see(INSERT)
  66.         self.deleteall.config(text='C')
  67.         self.txt.config(state=DISABLED)
  68.  
  69.     def delete_all(self):
  70.         self.txt.config(state=NORMAL)
  71.         self.txt.delete('1.0', END)
  72.         self.txt.config(state=DISABLED)
  73.         self.deleteall.config(text='AC')
  74.  
  75.     def per_cent(self):
  76.         self.txt.config(state=NORMAL)
  77.         try:
  78.             alltext = self.txt.get('1.0', END)
  79.             alltext = int(alltext)
  80.         except:
  81.             showinfo('EROR', 'Произошла ошибка')
  82.             self.txt.delete('1.0', END)
  83.             self.txt.config(state=DISABLED)
  84.         else:
  85.             self.txt.delete('1.0', END)
  86.             self.txt.insert(INSERT, alltext / 100)
  87.             self.txt.config(state=DISABLED)
  88.  
  89.     def minus_plus(self):
  90.         self.txt.config(state=NORMAL)
  91.         try:
  92.             alltext = self.txt.get('1.0', END)
  93.             alltext = int(alltext)
  94.         except:
  95.             showinfo('EROR', 'Произошла ошибка')
  96.             self.txt.delete('1.0', END)
  97.             self.txt.config(state=DISABLED)
  98.         else:
  99.             self.txt.delete('1.0', END)
  100.             self.txt.insert(INSERT, alltext * -1)
  101.             self.txt.config(state=DISABLED)
  102.  
  103.     def isum(self):
  104.         self.txt.config(state=NORMAL)
  105.         try:
  106.             alltext = self.txt.get('1.0', END)
  107.             alltext = eval(alltext)
  108.         except:
  109.             showinfo('EROR', 'Произошла ошибка')
  110.             self.txt.delete('1.0', END)
  111.             self.txt.config(state=DISABLED)
  112.         else:
  113.             self.txt.delete('1.0', END)
  114.             self.txt.insert(INSERT, alltext)
  115.             self.txt.config(state=DISABLED)
  116.  
  117.     def tab(self, event):
  118.         self.txt.config(state=NORMAL)
  119.         self.txt.insert(INSERT, ' ')
  120.         self.txt.config(state=DISABLED)
  121.  
  122.  
  123. Calculator()
  124. root.mainloop()
  125.