Загрузка данных
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()