/
luckystar
/
PythonProjects
Обзор
Документация
Войти
/
luckystar
/
PythonProjects
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Calculator/main.py
141 строка
5 KB
ZeroCreator
Calculator
17 дек 2021, 18:37
17 дек 2021, 18:37
7655047
Код
Авторство
О чём код?
# Calculator. import tkinter as tk from tkinter import messagebox # функция смены последней цифры при вводе def add_digit(digit): value = calc.get() if value[0] == '0' and len(value) == 1: value = value[1:] calc['state'] = tk.NORMAL calc.delete(0, tk.END) calc.insert(0, value + digit) calc['state'] = tk.DISABLED # функция ввода операций калькуляции def add_operation(operation): value = calc.get() if value[-1] in '-+/*': value = value[:-1] elif '+' in value or '-' in value or '/' in value or '*' in value: calculate() value = calc.get() calc['state'] = tk.NORMAL calc.delete(0, tk.END) calc.insert(0, value + operation) calc['state'] = tk.DISABLED # функция выведения результата вычисления def calculate(): value = calc.get() if value[-1] in '+-/*': value = value + value[:-1] calc['state'] = tk.NORMAL calc.delete(0, tk.END) try: calc.insert(0, eval(value)) except (NameError, SyntaxError): messagebox.showinfo('Внимание', 'Нужно вводить только цифры! | Вы ввели другие символы') calc.insert(0, 0) except ZeroDivisionError: messagebox.showinfo('Внимание', 'На ноль делить нельзя!!!') calc.insert(0, 0) calc['state'] = tk.DISABLED # функция очистки окна ввода def clear(): calc['state'] = tk.NORMAL calc.delete(0, tk.END) calc.insert(0, 0) calc['state'] = tk.DISABLED # обработка цифровых кнопок def make_digit_button(digit): return tk.Button(text=digit, bd=5, font=('Arial', 13), command=lambda: add_digit(digit)) # обработка кнопок операций def make_operation_button(operation): return tk.Button(text=operation, bd=5, font=('Arial', 13), fg='red', command=lambda: add_operation(operation)) # обработка кнопки '=' def make_calc_button(operation): return tk.Button(text=operation, bd=5, font=('Arial', 13), fg='red', command=calculate) # обработка кнопки 'C' def make_clear_button(operation): return tk.Button(text=operation, bd=5, font=('Arial', 13), fg='red', command=clear) # привязка нажатий на клавиши к окну программы def press_key(event): if event.char.isdigit(): add_digit(event.char) elif event.char in '+-/*': add_operation(event.char) elif event.char == '\r': calculate() # оформление окна калькулятора win = tk.Tk() win.geometry(f"240x270+100+200") win['bg'] = '#33ffe6' win.title('Калькулятор') win.bind('<Key>', press_key) photo = tk.PhotoImage(file="calc.png") win.iconphoto(False, photo) # поле ввода calc = tk.Entry(win, justify=tk.RIGHT, font=('Arial', 15), width=15) calc.insert(0, '0') calc['state'] = tk.DISABLED calc.grid(row=0, column=0, columnspan=4, stick='we', padx=5, pady=2) # оформление цифровых кнопок make_digit_button('1').grid(row=1, column=0, stick='wens', padx=5, pady=5) make_digit_button('2').grid(row=1, column=1, stick='wens', padx=5, pady=5) make_digit_button('3').grid(row=1, column=2, stick='wens', padx=5, pady=5) make_digit_button('4').grid(row=2, column=0, stick='wens', padx=5, pady=5) make_digit_button('5').grid(row=2, column=1, stick='wens', padx=5, pady=5) make_digit_button('6').grid(row=2, column=2, stick='wens', padx=5, pady=5) make_digit_button('7').grid(row=3, column=0, stick='wens', padx=5, pady=5) make_digit_button('8').grid(row=3, column=1, stick='wens', padx=5, pady=5) make_digit_button('9').grid(row=3, column=2, stick='wens', padx=5, pady=5) make_digit_button('0').grid(row=4, column=0, stick='wens', padx=5, pady=5) # оформление операционных кнопок make_operation_button('+').grid(row=1, column=3, stick='wens', padx=5, pady=5) make_operation_button('-').grid(row=2, column=3, stick='wens', padx=5, pady=5) make_operation_button('/').grid(row=3, column=3, stick='wens', padx=5, pady=5) make_operation_button('*').grid(row=4, column=3, stick='wens', padx=5, pady=5) # оформление кнопок вывода результата и очистки поля ввода make_calc_button('=').grid(row=4, column=2, stick='wens', padx=5, pady=5) make_clear_button('C').grid(row=4, column=1, stick='wens', padx=5, pady=5) # размеры столбцов таблицы win.grid_columnconfigure(0, minsize=60) win.grid_columnconfigure(1, minsize=60) win.grid_columnconfigure(2, minsize=60) win.grid_columnconfigure(3, minsize=60) # размеры строк таблицы win.grid_rowconfigure(1, minsize=60) win.grid_rowconfigure(2, minsize=60) win.grid_rowconfigure(3, minsize=60) win.grid_rowconfigure(4, minsize=60) # win.mainloop()