Loading...
Python | Как сделать калькулятор на Python
Импорт библиотек
php
   import tkinter as tk from tkinter import messagebox   
tkinter: Основная библиотека для создания графического интерфейса пользователя (GUI) в Python. messagebox: Модуль для отображения сообщений об ошибках или других уведомлений пользователю. Определение класса Calculator
php
   class Calculator(tk.Tk):     def __init__(self):         super().__init__()         self.title("Калькулятор")         self.geometry("350x500")         self.configure(bg="#2c3e50")         self.resizable(False, False)                  self.create_widgets()         self.bind("<Key>", self.on_key_press)  # Привязываем обработчик нажатий клавиш   
Calculator: Класс, который наследует от tk.Tk, представляя собой основное окно приложения. __init__: Конструктор класса, который инициализирует окно, настраивает его размеры и цвет фона, делает окно неизменяемым по размеру, создаёт виджеты и привязывает обработчик нажатий клавиш. Создание виджетов
php
   def create_widgets(self):     self.result_var = tk.StringVar()     self.entry = tk.Entry(self, textvariable=self.result_var, font=('Arial', 24), bd=0, relief='flat',                            bg="#ecf0f1", fg="#2c3e50", justify='right')     self.entry.grid(row=0, column=0, columnspan=4, pady=20, padx=10, sticky='nsew')      buttons = [         ('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3),         ('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3),         ('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3),         ('0', 4, 0), ('.', 4, 1), ('+', 4, 2), ('=', 4, 3),         ('C', 5, 0, 4)     ]      for button in buttons:         text = button[0]         row = button[1]         col = button[2]         colspan = button[3] if len(button) > 3 else 1         color = "#3498db" if text not in ['C', '='] else "#e74c3c"         button_widget = tk.Button(self, text=text, font=('Arial', 18), width=5, height=2,                                   bg=color, fg="#ecf0f1", bd=0, relief='flat',                                   command=lambda t=text: self.on_button_click(t))         button_widget.grid(row=row, column=col, columnspan=colspan, padx=5, pady=5, sticky='nsew')      for i in range(6):         self.grid_rowconfigure(i, weight=1)     for i in range(4):         self.grid_columnconfigure(i, weight=1)   
self.result_var: Объект StringVar, используемый для хранения текста, отображаемого в поле ввода. self.entry: Поле ввода для отображения текущего выражения и результата. Настроено для отображения текста справа. buttons: Список кнопок калькулятора с их текстом, позицией в сетке и (опционально) количеством объединённых ячеек. tk.Button: Создаёт кнопки для калькулятора. Цвет кнопок определяется в зависимости от их функции (обычные или специальные кнопки C и =). command привязывает действие к нажатию кнопки. self.grid_rowconfigure и self.grid_columnconfigure: Настройка поведения строк и колонок сетки для обеспечения правильного масштабирования виджетов. Обработка нажатий кнопок
php
   def on_button_click(self, char):     if char == 'C':         self.result_var.set('')     elif char == '=':         try:             expression = self.result_var.get()             result = eval(expression)             self.result_var.set(result)         except Exception as e:             messagebox.showerror("Ошибка", f"Неверное выражение: {e}")     else:         current_text = self.result_var.get()         self.result_var.set(current_text + char)   
char: Символ, который был нажат на кнопке. 'C': Очищает поле ввода. '=': Вычисляет результат выражения. Использует функцию eval для вычисления результата. Если выражение неверное, отображается сообщение об ошибке. Другие символы: Добавляют символы к текущему выражению в поле ввода. Обработка нажатий клавиш
php
   def on_key_press(self, event):     key = event.char     if key in '0123456789':         self.result_var.set(self.result_var.get() + key)     elif key in '+-*/':         current_text = self.result_var.get()         if current_text and current_text[-1] not in '+-*/':             self.result_var.set(current_text + key)     elif event.keysym == 'Return':  # Нажатие клавиши Enter         self.on_button_click('=')     elif event.keysym == 'BackSpace':  # Нажатие клавиши Backspace         current_text = self.result_var.get()         self.result_var.set(current_text[:-1])     elif key.lower() == 'c':  # Нажатие клавиши C         self.on_button_click('C')   
event.char: Символ, соответствующий нажатой клавише. event.keysym: Символьный код для специальных клавиш. 'Return': Обрабатывает нажатие клавиши Enter. 'BackSpace': Удаляет последний символ из строки. key.lower() == 'c': Обрабатывает нажатие клавиши 'C'. Запуск приложения
php
   if __name__ == "__main__":     app = Calculator()     app.mainloop()   
if __name__ == "__main__": Убедитесь, что код выполняется только при запуске скрипта напрямую, а не при импорте. app = Calculator(): Создаёт экземпляр класса Calculator. app.mainloop(): Запускает основной цикл обработки событий Tkinter. Этот скрипт представляет собой простой калькулятор с графическим интерфейсом, который позволяет выполнять базовые арифметические операции и поддерживает ввод с клавиатуры.
Полностью готовый код
php
   import tkinter as tk from tkinter import messagebox  class Calculator(tk.Tk):     def __init__(self):         super().__init__()         self.title("Калькулятор")         self.geometry("350x500")         self.configure(bg="#2c3e50")         self.resizable(False, False)                  self.create_widgets()         self.bind("<Key>", self.on_key_press)  # Привязываем обработчик нажатий клавиш      def create_widgets(self):         # Entry widget для отображения ввода         self.result_var = tk.StringVar()         self.entry = tk.Entry(self, textvariable=self.result_var, font=('Arial', 24), bd=0, relief='flat',                                bg="#ecf0f1", fg="#2c3e50", justify='right')         self.entry.grid(row=0, column=0, columnspan=4, pady=20, padx=10, sticky='nsew')          # Кнопки калькулятора         buttons = [             ('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3),             ('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3),             ('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3),             ('0', 4, 0), ('.', 4, 1), ('+', 4, 2), ('=', 4, 3),             ('C', 5, 0, 4)         ]          for button in buttons:             text = button[0]             row = button[1]             col = button[2]             colspan = button[3] if len(button) > 3 else 1             color = "#3498db" if text not in ['C', '='] else "#e74c3c"             button_widget = tk.Button(self, text=text, font=('Arial', 18), width=5, height=2,                                       bg=color, fg="#ecf0f1", bd=0, relief='flat',                                       command=lambda t=text: self.on_button_click(t))             button_widget.grid(row=row, column=col, columnspan=colspan, padx=5, pady=5, sticky='nsew')          # Настройка поведения строк и колонок         for i in range(6):             self.grid_rowconfigure(i, weight=1)         for i in range(4):             self.grid_columnconfigure(i, weight=1)      def on_button_click(self, char):         if char == 'C':             self.result_var.set('')         elif char == '=':             try:                 expression = self.result_var.get()                 result = eval(expression)                 self.result_var.set(result)             except Exception as e:                 messagebox.showerror("Ошибка", f"Неверное выражение: {e}")         else:             current_text = self.result_var.get()             self.result_var.set(current_text + char)      def on_key_press(self, event):         key = event.char         if key in '0123456789':             self.result_var.set(self.result_var.get() + key)         elif key in '+-*/':             current_text = self.result_var.get()             if current_text and current_text[-1] not in '+-*/':                 self.result_var.set(current_text + key)         elif event.keysym == 'Return':  # Нажатие клавиши Enter             self.on_button_click('=')         elif event.keysym == 'BackSpace':  # Нажатие клавиши Backspace             current_text = self.result_var.get()             self.result_var.set(current_text[:-1])         elif key.lower() == 'c':  # Нажатие клавиши C             self.on_button_click('C')  if __name__ == "__main__":     app = Calculator()     app.mainloop()   
Онлайн: 2
Время:
Gen. 0.0451
(c) Bym.Guru 2010-2026