Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.34 KB | None | 0 0
  1. from tkinter import *
  2. from tkinter import messagebox
  3. from tkinter import ttk
  4. import math
  5. import sys
  6.  
  7.  
  8. root = Tk()
  9. root.title('Calculator')
  10. #root.geometry('300x250')
  11. bttn_list = [ #состав кнопок
  12. 'AC', '±', 'π', '/',
  13. '7', '8', '9', '*',
  14. '4', '5', '6', '-',
  15. '1', '2', '3',  '+',
  16. '0', '.', '=',  '√',
  17. 'n!', 'cos', 'sin','xⁿ',
  18. '(',')','Exit', ]
  19. r = 1 #задание размеров и внешнего вида
  20. c = 0
  21. for i in bttn_list:
  22.     rel = ''
  23.     cmd=lambda x=i: calc(x)
  24.     ttk.Button(root, text=i, command=cmd, width=3).grid(row=r, column=c, ipady=12)
  25.     c += 1
  26.     if c > 3:
  27.         c = 0
  28.         r += 1
  29. calc_entry = Entry(root, width = 25) #Задание размеров поля ENTER
  30. calc_entry.grid(row=0, column=0, columnspan=5)
  31.  
  32. # ограничивает количество знаков после запятой
  33. def limiter(number):
  34.     x = 0  # если нет знаков после запятой они не будут отображаться
  35.  
  36.     lim = 8  # количество знаков после запятой {:.8f}
  37.     form = '{:.' + str(lim) +'f}'
  38.  
  39.     # если есть знаки после запятой
  40.     if '.' in str(number):
  41.         # считаем их
  42.         x = len(str(number).split('.')[1])
  43.  
  44.     # если их меньше или равно 8
  45.     if x <= lim:
  46.         # то выводим число с его точностью
  47.         form = '{:.' + str(x) +'f}'
  48.  
  49.     return form.format(number)
  50.  
  51. def calc(key):     #функции кнопок
  52.     global memory
  53.     if key == '=':
  54.         str1 = '-+0123456789.*/)('
  55.         if calc_entry.get()[0] not in str1:
  56.             calc_entry.insert(END, 'First symbol is not number!')
  57.             messagebox.showerror('Error!', 'You did not enter the number!')
  58.         try:  #исчисления
  59.             result = eval(calc_entry.get())
  60.             calc_entry.insert(END, '=' + limiter(result))
  61.         except:
  62.             calc_entry.insert(END, 'Error!')
  63.             messagebox.showerror('Error!', 'Check the correctness of data')
  64.     elif key == 'C':
  65.         calc_entry.delete(0, END)
  66.     elif key == '±':
  67.         if '=' in calc_entry.get():
  68.             calc_entry.delete(0, END)
  69.         try:
  70.             if calc_entry.get()[0] == '-':
  71.                 calc_entry.delete(0)
  72.             else:
  73.                 calc_entry.insert(0, '-')
  74.         except IndexError:
  75.             pass
  76.     elif key == 'π':
  77.             calc_entry.insert(END, math.pi)
  78.     elif key == 'Exit':
  79.             root.after(1, root.destroy)
  80.             sys.exit
  81.     elif key == 'xⁿ':
  82.             calc_entry.insert(END, '**')
  83.     elif key == 'sin':
  84.             calc_entry.insert(END, '=' + limiter(math.sin(int(calc_entry.get()))))
  85.     elif key == 'cos':
  86.             calc_entry.insert(END, '=' + limiter(math.cos(int(calc_entry.get()))))
  87.     elif key == '(':
  88.             calc_entry.insert(END, '(')
  89.     elif key == ')':
  90.             calc_entry.insert(END, ')')
  91.     elif key == 'n!':
  92.             calc_entry.insert(END, '=' + limiter(math.factorial(int(calc_entry.get()))))
  93.     elif key == '√':
  94.             calc_entry.insert(END, '=' + limiter(math.sqrt(int(calc_entry.get()))))
  95.     else:
  96.             if '=' in calc_entry.get():
  97.                 calc_entry.delete(0, END)
  98.             calc_entry.insert(END, key)
  99. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement