import tkinter as tk
from tkinter import messagebox
class Calculator:
def init(self):
self.window = tk.Tk()
self.window.title("Калькулятор")
self.window.geometry("300x400")
self.window.resizable(False, False)
self.expression = ""
self.result_var = tk.StringVar()
self.create_widgets()
def create_widgets(self):
# Поле отображения результата
result_frame = tk.Frame(self.window)
result_frame.pack(fill=tk.X, padx=5, pady=5)
result_entry = tk.Entry(
result_frame,
textvariable=self.result_var,
font=("Arial", 16),
justify="right",
state="readonly"
)
result_entry.pack(fill=tk.X)
# Кнопки
button_frame = tk.Frame(self.window)
button_frame.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
buttons = [
['C', '/', '*', 'Del'],
['7', '8', '9', '-'],
['4', '5', '6', '+'],
['1', '2', '3', '='],
['0', '.', '', '']
]
for i, row in enumerate(buttons):
for j, text in enumerate(row):
if text:
if text == '0':
btn = tk.Button(
button_frame,
text=text,
font=("Arial", 14),
command=lambda t=text: self.button_click(t)
)
btn.grid(row=i, column=j, columnspan=2, sticky="nsew", padx=1, pady=1)
else:
btn = tk.Button(
button_frame,
text=text,
font=("Arial", 14),
command=lambda t=text: self.button_click(t)
)
btn.grid(row=i, column=j, sticky="nsew", padx=1, pady=1)
# Настройка сетки
for i in range(5):
button_frame.grid_rowconfigure(i, weight=1)
for j in range(4):
button_frame.grid_columnconfigure(j, weight=1)
def button_click(self, char):
if char == 'C':
self.expression = ""
elif char == 'Del':
self.expression = self.expression[:-1]
elif char == '=':
try:
result = eval(self.expression)
self.expression = str(result)
except:
messagebox.showerror("Ошибка", "Неверное выражение")
self.expression = ""
else:
self.expression += char
self.result_var.set(self.expression)
def run(self):
self.window.mainloop()
Запуск калькулятора
if name == "main":
calc = Calculator()
calc.run()
Top comments (0)