Практична робота. Створення графічного інтерфейсу: Проєкт «Калькулятор»

На попередніх уроках ми навчилися створювати прості вікна та кнопки. Сьогодні ми переходимо до створення складнішого та кориснішого продукту — настільного калькулятора. Цей проєкт допоможе зрозуміти, як програма взаємодіє з великою кількістю кнопок та як обробляти математичні вирази.


Підготовка: Що нам знадобиться?

Перш ніж почати, переконайтеся, що на вашому комп’ютері встановлено Python (перевірити можна командою python --version у терміналі). Ми будемо використовувати стандартну бібліотеку Tkinter, яка не потребує додаткового встановлення.


Як працює калькулятор у коді?

Робота калькулятора базується на трьох основних елементах:

  1. Дисплей (Entry): текстове поле, куди ми записуємо цифри та бачимо результат.
  2. Сітка кнопок (Buttons): цифри від 0 до 9 та операції (+, -, *, /).
  3. Обробник (Логіка): функція, яка зчитує текст із дисплея, обчислює його як математичний вираз і повертає відповідь.

Секретна функція eval()

У Python є магічна функція eval(). Вона бере рядок тексту (наприклад, "2+2*5") і автоматично перетворює його на математичне обчислення, видаючи результат 12. Це значно спрощує створення нашого калькулятора.


Крок 1. Створюємо інтерфейс

Для розташування кнопок ми використаємо метод .grid(). Він дозволяє розміщувати елементи в таблиці (рядки та стовпчики), що ідеально підходить для калькулятора.

ЕлементРядок (row)Стовпчик (column)
Дисплей00 (розтягнуто на 4)
Кнопка “7”10
Кнопка “+”13

Крок 2. Пишемо логіку функцій

Нам потрібні три основні дії:

  1. Додати символ: коли ми тиснемо цифру, вона має дописатися в кінець рядка на дисплеї.
  2. Очистити (C): повністю видалити текст із дисплея.
  3. Порахувати (=): взяти рядок, обчислити його та вивести результат.

Фінальний код проєкту

Скопіюйте цей код у ваш редактор (наприклад, Visual Studio Code, IDLE, PyCharm або Cursor) і запустіть його.

Python

import tkinter as tk
from tkinter import messagebox

# Функція для додавання символів на дисплей
def add_digit(digit):
    current = display.get()
    display.delete(0, tk.END)
    display.insert(0, current + digit)

# Функція для очищення дисплея
def clear_display():
    display.delete(0, tk.END)

# Функція для обчислення результату
def calculate():
    try:
        result = eval(display.get())
        display.delete(0, tk.END)
        display.insert(0, str(result))
    except ZeroDivisionError:
        messagebox.showerror("Помилка", "На нуль ділити не можна!")
        clear_display()
    except Exception:
        messagebox.showerror("Помилка", "Некоректний вираз")
        clear_display()

# Налаштування вікна
root = tk.Tk()
root.title("Мій Калькулятор")
root.geometry("300x400")
root.resizable(False, False)

# Дисплей калькулятора
display = tk.Entry(root, font=("Arial", 20), justify="right", bd=10, insertwidth=4)
display.grid(row=0, column=0, columnspan=4, 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), ('C', 4, 1), ('=', 4, 2), ('+', 4, 3),
]

# Створення кнопок у циклі
for (text, row, col) in buttons:
    if text == '=':
        action = calculate
    elif text == 'C':
        action = clear_display
    else:
        # Використовуємо lambda, щоб передати символ у функцію
        action = lambda t=text: add_digit(t)
    
    tk.Button(root, text=text, font=("Arial", 14), width=5, height=2,
              command=action).grid(row=row, column=col, sticky="nsew")

# Налаштування ваги стовпчиків, щоб кнопки розтягувалися
for i in range(4):
    root.grid_columnconfigure(i, weight=1)
for i in range(1, 5):
    root.grid_rowconfigure(i, weight=1)

root.mainloop()

Чек-лист для перевірки роботи

  • [ ] Кнопки розташовані рівною сіткою.
  • [ ] При натисканні на цифри вони з’являються на екрані.
  • [ ] Кнопка C повністю очищує поле.
  • [ ] При спробі поділити на нуль з’являється вікно з попередженням.
  • [ ] Кнопка = коректно обчислює вирази (наприклад, 2+2*2 має дати 6).

Завдання для “Профі” (Level Up)

Якщо ви швидко впоралися з основним завданням, спробуйте вдосконалити свій калькулятор:

  1. Дизайн: Змініть колір кнопок з операціями (+, -, *, /) на інший (наприклад, помаранчевий).
  2. Функціонал: Додайте кнопку для обчислення квадратного кореня або піднесення до степеня.
  3. Інтерфейс: Зробіть так, щоб результат виводився іншим кольором.
,