Загрузка данных


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()