import tkinter as tk
from tkinter import messagebox
def perform_operation(op):
try:
val1 = entry_num1.get().strip()
val2 = entry_num2.get().strip()
if not val1 or not val2:
raise ValueError("Одно или оба поля пусты.")
num1 = float(val1.replace(",", "."))
num2 = float(val2.replace(",", "."))
# Выполнение вычисления в отдельной функции (согласно условию)
res = calculate(num1, num2, op)
label_result.config(text=f"Результат: {res}")
except ValueError:
messagebox.showerror("Ошибка", "Вводите только числа!")
except ZeroDivisionError:
messagebox.showerror("Ошибка", "Деление на ноль невозможно!")
def calculate(n1, n2, op):
if op == "+": return n1 + n2
if op == "-": return n1 - n2
if op == "*": return n1 * n2
if op == "/":
if n2 == 0:
raise ZeroDivisionError
return n1 / n2
# Создание окна
root = tk.Tk()
root.title("Калькулятор")
root.geometry("350x200")
# Верстка элементов через grid
tk.Label(root, text="Число 1:", font=("Arial", 10)).grid(row=0, column=0, padx=10, pady=10, sticky="e")
entry_num1 = tk.Entry(root, font=("Arial", 10), width=15)
entry_num1.grid(row=0, column=1, columnspan=2, padx=10, pady=10, sticky="w")
tk.Label(root, text="Число 2:", font=("Arial", 10)).grid(row=1, column=0, padx=10, pady=5, sticky="e")
entry_num2 = tk.Entry(root, font=("Arial", 10), width=15)
entry_num2.grid(row=1, column=1, columnspan=2, padx=10, pady=5, sticky="w")
# Кнопки действий
btn_plus = tk.Button(root, text="+", width=4, command=lambda: perform_operation("+"))
btn_plus.grid(row=2, column=0, padx=5, pady=10)
btn_minus = tk.Button(root, text="-", width=4, command=lambda: perform_operation("-"))
btn_minus.grid(row=2, column=1, padx=5, pady=10)
btn_mul = tk.Button(root, text="*", width=4, command=lambda: perform_operation("*"))
btn_mul.grid(row=2, column=2, padx=5, pady=10)
btn_div = tk.Button(root, text="/", width=4, command=lambda: perform_operation("/"))
btn_div.grid(row=2, column=3, padx=5, pady=10)
# Надпись для вывода результата под кнопками
label_result = tk.Label(root, text="Результат: ", font=("Arial", 12, "bold"))
label_result.grid(row=3, column=0, columnspan=4, pady=15)
root.mainloop()