Создание главного окна

Создание главного окна


Создание приложения «Калькулятор» с графическим интерфейсом на Python
Введение


Преимущества Tkinter

  • Простота: Не требует установки дополнительных пакетов.
  • Кроссплатформенность: Работает на Windows, macOS, Linux.
  • Гибкость: Позволяет создавать интуитивно понятные интерфейсы.

Шаг 1: Установка и настройка
Убедитесь, что у вас установлен Python (версии 3.x). Библиотека Tkinter уже включена в стандартную библиотеку, поэтому дополнительных действий не требуется.


Шаг 2: Создание основного окна
Создайте файл calculator.py и добавьте код для отображения окна:

import tkinter as tk

# Создание главного окна
root = tk.Tk()
root.title("Калькулятор")
root.geometry("300x400")
root.resizable(False, False)  # Запрет изменения размера

root.mainloop()

Этот код создает окно с заголовком «Калькулятор» и фиксированным размером.


Шаг 3: Добавление элементов интерфейса
Поле ввода
Добавьте текстовое поле для отображения вычислений:

display = tk.Entry(root, font=('Arial', 20), justify='right')
display.grid(row=0, column=0, columnspan=4, padx=10, pady=10, sticky='ew')

Кнопки
Создадим кнопки для цифр и операций. Для удобства используем список:

buttons = [
    '7', '8', '9', '/',
    '4', '5', '6', '*',
    '1', '2', '3', '-',
    '0', '.', '=', '+'
]

Шаг 4: Размещение кнопок на сетке
Используем цикл для расстановки кнопок в grid-сетке:

row = 1
col = 0
for button in buttons:
    action = lambda x=button: on_click(x)
    tk.Button(root, text=button, font=('Arial', 15), command=action, width=4, height=2) \
        .grid(row=row, column=col, padx=5, pady=5)
    col += 1
    if col > 3:
        col = 0
        row += 1

Шаг 5: Логика работы калькулятора
Функция обработки нажатий
Добавьте функцию on_click(), которая обрабатывает ввод данных:

def on_click(char):
    if char == '=':
        try:
            result = eval(display.get())
            display.delete(0, tk.END)
            display.insert(tk.END, str(result))
        except:
            display.delete(0, tk.END)
            display.insert(tk.END, "Ошибка")
    else:
        display.insert(tk.END, char)

Очистка поля
Добавьте кнопку «C» для сброса:

tk.Button(root, text='C', font=('Arial', 15), command=lambda: display.delete(0, tk.END), width=4, height=2) \
    .grid(row=row+1, column=0, columnspan=4, sticky='we', padx=5, pady=5)

Шаг 6: Запуск приложения
Соберите все части кода вместе и запустите файл. Результат должен выглядеть так:
Пример интерфейса


Доработки и улучшения

  1. Обработка ошибок: Добавьте проверку ввода, чтобы избежать некорректных выражений.
  2. Дополнительные операции: Реализуйте возведение в степень, квадратный корень и т.д.
  3. История вычислений: Сохраняйте предыдущие результаты в отдельном поле.
  4. Стилизация: Измените цвета, шрифты и размеры элементов через параметры Tkinter.

Заключение
Вы создали простой, но функциональный калькулятор на Python с графическим интерфейсом. Этот проект можно использовать как основу для более сложных приложений, например, инженерного калькулятора или конвертера валют. Tkinter предоставляет множество возможностей для экспериментов — пробуйте, дорабатывайте и изучайте новые функции!

Полный код:

import tkinter as tk

def on_click(char):
    if char == '=':
        try:
            result = eval(display.get())
            display.delete(0, tk.END)
            display.insert(tk.END, str(result))
        except:
            display.delete(0, tk.END)
            display.insert(tk.END, "Ошибка")
    else:
        display.insert(tk.END, char)

root = tk.Tk()
root.title("Калькулятор")
root.geometry("300x400")
root.resizable(False, False)

display = tk.Entry(root, font=('Arial', 20), justify='right')
display.grid(row=0, column=0, columnspan=4, padx=10, pady=10, sticky='ew')

buttons = [
    '7', '8', '9', '/',
    '4', '5', '6', '*',
    '1', '2', '3', '-',
    '0', '.', '=', '+'
]

row = 1
col = 0
for button in buttons:
    action = lambda x=button: on_click(x)
    tk.Button(root, text=button, font=('Arial', 15), command=action, width=4, height=2) \
        .grid(row=row, column=col, padx=5, pady=5)
    col += 1
    if col > 3:
        col = 0
        row += 1

tk.Button(root, text='C', font=('Arial', 15), command=lambda: display.delete(0, tk.END), width=4, height=2) \
    .grid(row=row, column=0, columnspan=4, sticky='we', padx=5, pady=5)

root.mainloop()