Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from tkinter import *
- from tkinter import messagebox
- from tkinter import ttk
- import math
- import sys
- root = Tk()
- root.title('Calculator')
- #root.geometry('300x250')
- bttn_list = [ #состав кнопок
- 'AC', '±', 'π', '/',
- '7', '8', '9', '*',
- '4', '5', '6', '-',
- '1', '2', '3', '+',
- '0', '.', '=', '√',
- 'n!', 'cos', 'sin','xⁿ',
- '(',')','Exit', ]
- r = 1 #задание размеров и внешнего вида
- c = 0
- for i in bttn_list:
- rel = ''
- cmd=lambda x=i: calc(x)
- ttk.Button(root, text=i, command=cmd, width=3).grid(row=r, column=c, ipady=12)
- c += 1
- if c > 3:
- c = 0
- r += 1
- calc_entry = Entry(root, width = 25) #Задание размеров поля ENTER
- calc_entry.grid(row=0, column=0, columnspan=5)
- # ограничивает количество знаков после запятой
- def limiter(number):
- x = 0 # если нет знаков после запятой они не будут отображаться
- lim = 8 # количество знаков после запятой {:.8f}
- form = '{:.' + str(lim) +'f}'
- # если есть знаки после запятой
- if '.' in str(number):
- # считаем их
- x = len(str(number).split('.')[1])
- # если их меньше или равно 8
- if x <= lim:
- # то выводим число с его точностью
- form = '{:.' + str(x) +'f}'
- return form.format(number)
- def calc(key): #функции кнопок
- global memory
- if key == '=':
- str1 = '-+0123456789.*/)('
- if calc_entry.get()[0] not in str1:
- calc_entry.insert(END, 'First symbol is not number!')
- messagebox.showerror('Error!', 'You did not enter the number!')
- try: #исчисления
- result = eval(calc_entry.get())
- calc_entry.insert(END, '=' + limiter(result))
- except:
- calc_entry.insert(END, 'Error!')
- messagebox.showerror('Error!', 'Check the correctness of data')
- elif key == 'C':
- calc_entry.delete(0, END)
- elif key == '±':
- if '=' in calc_entry.get():
- calc_entry.delete(0, END)
- try:
- if calc_entry.get()[0] == '-':
- calc_entry.delete(0)
- else:
- calc_entry.insert(0, '-')
- except IndexError:
- pass
- elif key == 'π':
- calc_entry.insert(END, math.pi)
- elif key == 'Exit':
- root.after(1, root.destroy)
- sys.exit
- elif key == 'xⁿ':
- calc_entry.insert(END, '**')
- elif key == 'sin':
- calc_entry.insert(END, '=' + limiter(math.sin(int(calc_entry.get()))))
- elif key == 'cos':
- calc_entry.insert(END, '=' + limiter(math.cos(int(calc_entry.get()))))
- elif key == '(':
- calc_entry.insert(END, '(')
- elif key == ')':
- calc_entry.insert(END, ')')
- elif key == 'n!':
- calc_entry.insert(END, '=' + limiter(math.factorial(int(calc_entry.get()))))
- elif key == '√':
- calc_entry.insert(END, '=' + limiter(math.sqrt(int(calc_entry.get()))))
- else:
- if '=' in calc_entry.get():
- calc_entry.delete(0, END)
- calc_entry.insert(END, key)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement