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)