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


import tkinter as tk
from tkinter import messagebox

class CalculatorApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Калькулятор")
        self.root.geometry("400x300")
        
        self.create_menu()
        self.create_widgets()
    
    def create_menu(self):
        menubar = tk.Menu(self.root)
        self.root.config(menu=menubar)
        
        operations_menu = tk.Menu(menubar, tearoff=0)
        menubar.add_cascade(label="Операции", menu=operations_menu)
        
        operations_menu.add_command(label="Сложение", command=self.addition)
        operations_menu.add_command(label="Вычитание", command=self.subtraction)
        operations_menu.add_command(label="Умножение", command=self.multiplication)
        operations_menu.add_command(label="Деление", command=self.division)
        
        operations_menu.add_separator()
        operations_menu.add_command(label="Обмен", command=self.swap)
        operations_menu.add_command(label="Очистка", command=self.clear)
    
    def create_widgets(self):
        tk.Label(self.root, text="Первое число:", font=("Arial", 12)).pack(pady=5)
        self.entry1 = tk.Entry(self.root, font=("Arial", 12), width=30)
        self.entry1.pack(pady=5)
        
        tk.Label(self.root, text="Второе число:", font=("Arial", 12)).pack(pady=5)
        self.entry2 = tk.Entry(self.root, font=("Arial", 12), width=30)
        self.entry2.pack(pady=5)
        
        tk.Label(self.root, text="Результат:", font=("Arial", 12)).pack(pady=10)
        self.result_label = tk.Label(self.root, text="", font=("Arial", 14, "bold"), 
                                     fg="blue", bg="yellow", width=30, relief="sunken")
        self.result_label.pack(pady=5)
        
        btn_frame = tk.Frame(self.root)
        btn_frame.pack(pady=10)
        
        tk.Button(btn_frame, text="+", command=self.addition, width=8).grid(row=0, column=0, padx=5)
        tk.Button(btn_frame, text="-", command=self.subtraction, width=8).grid(row=0, column=1, padx=5)
        tk.Button(btn_frame, text="*", command=self.multiplication, width=8).grid(row=0, column=2, padx=5)
        tk.Button(btn_frame, text="/", command=self.division, width=8).grid(row=0, column=3, padx=5)
                btn_frame2 = tk.Frame(self.root)
        btn_frame2.pack(pady=5)
        
        tk.Button(btn_frame2, text="Обмен", command=self.swap, width=15).grid(row=0, column=0, padx=5)
        tk.Button(btn_frame2, text="Очистка", command=self.clear, width=15).grid(row=0, column=1, padx=5)
    
    def get_values(self):
        try:
            val1 = float(self.entry1.get())
            val2 = float(self.entry2.get())
            return val1, val2
        except ValueError:
            messagebox.showerror("Ошибка", "Введите корректные числа!")
            return None, None
    
    def set_result(self, value):
        self.result_label.config(text=str(value))
    
    def addition(self):
        val1, val2 = self.get_values()
        if val1 is not None:
            result = val1 + val2
            self.set_result(f"{val1} + {val2} = {result}")
    
    def subtraction(self):
        val1, val2 = self.get_values()
        if val1 is not None:
            result = val1 - val2
            self.set_result(f"{val1} - {val2} = {result}")
    
    def multiplication(self):
        val1, val2 = self.get_values()
        if val1 is not None:
            result = val1 * val2
            self.set_result(f"{val1} * {val2} = {result}")
    
    def division(self):
        val1, val2 = self.get_values()
        if val1 is not None:
            if val2 == 0:
                messagebox.showerror("Ошибка", "Деление на ноль невозможно!")
            else:
                result = val1 / val2
                self.set_result(f"{val1} / {val2} = {result}")
    
    def swap(self):
        val1 = self.entry1.get()
        val2 = self.entry2.get()
        
        self.entry1.delete(0, tk.END)        self.entry1.insert(0, val2)
        
        self.entry2.delete(0, tk.END)
        self.entry2.insert(0, val1)
        
        self.result_label.config(text="Значения обменены")
    
    def clear(self):
        self.entry1.delete(0, tk.END)
        self.entry2.delete(0, tk.END)
        self.result_label.config(text="")

root = tk.Tk()
app = CalculatorApp(root)
root.mainloop()