Создать простое приложение с графическим интерфейсом для на можно за 10–15 минут — достаточно использовать встроенную библиотеку tkinter. Это стандартный модуль для работы с GUI, который идёт в комплекте с Python, поэтому не потребуется устанавливать дополнительные зависимости. Даже новичок справится с базовыми окнами, кнопками и полями ввода.

В этой статье разберём весь процесс: от установки до сборки исполняемого файла .exe. Покажу, как создать основное окно, добавить виджеты, обработать события и упаковать проект для распространения. А ещё поделюсь лайфхаками, которые сэкономят время на отладке.

Подготовка окружения для работы с Tkinter

Первый шаг — установить Python (если его ещё нет). Скачивайте последнюю стабильную версию с официального сайта. Важно: при установке обязательно отметьте галочку Add Python to PATH, иначе система не сможет найти интерпретатор из командной строки. Для Windows 10/11 подойдёт Python 3.11+ — в этих версиях tkinter уже встроен.

После установки проверьте работу библиотеки. Откройте командную строку (cmd) и выполните:

python -m tkinter

Если откроется небольшое тестовое окно с виджетом Tk — всё в порядке. Если нет, переустановите Python, выбрав опцию Install for all users.

💡

Если после установки Python командная строка не распознаёт python, перезагрузите компьютер — изменения в применяются не всегда сразу

МетодОписаниеПример значения
title()Задаёт заголовок окна"Калькулятор"
geometry()Устанавливает размеры окна (ширина×высота)"800x600"
resizable()Разрешает/запрещает изменение размера окнаFalse, False
iconbitmap()Добавляет иконку в заголовок окна"icon.ico"

Структура базового приложения Tkinter

Любое приложение на tkinter состоит из трёх ключевых элементов:

  • Главное окно (Tk() или Toplevel()) — контейнер для всех виджетов.
  • Виджеты — кнопки, метки, поля ввода и другие элементы интерфейса.
  • Цикл обработки событий (mainloop()) — удерживает окно открытым и обрабатывает действия пользователя.

Минимальный код для отображения пустого окна:

import tkinter as tk

root = tk.Tk()
root.title("Мое приложение")
root.geometry("400x300")
root.mainloop()

Здесь:

Добавление виджетов: кнопки, поля ввода, метки

в tkinter создаются как объекты классов (Button, Label, Entry и др.) и размещаются в окне с помощью одного из трёх методов:

  • pack() — автоматически размещает виджеты по вертикали или горизонтали.
  • grid() — позволяет размещать элементы в таблице (строки и столбцы).
  • place() — точная привязка к координатам (пиксели).

Пример окна с кнопкой и полем ввода:

import tkinter as tk

def on_button_click():
 text = entry.get()
 label.config(text=f"Вы ввели: {text}")

root = tk.Tk()
root.title("Пример виджетов")

label = tk.Label(root, text="Введите текст:")
label.pack(pady=10)

entry = tk.Entry(root, width=40)
entry.pack(pady=5)

button = tk.Button(root, text="Показать", command=on_button_click)
button.pack(pady=10)

root.mainloop()

Функция on_button_click() вызывается при нажатии на кнопку. Метод get() извлекает текст из поля Entry, а config() изменяет параметры виджета (в данном случае текст метки).

Работа с макетом: grid vs pack

pack() удобен для простых интерфейсов, где виджеты располагаются друг под другом или в строку. Но если нужно точное выравнивание (например, форма с полями и подписями), лучше использовать grid(). Этот метод позволяет размещать элементы в ячейках невидимой таблицы.

Пример формы авторизации с grid():

  1. Создаём метку и поле для логина в первой строке.
  2. Добавляем метку и поле для пароля во второй строке.
  3. Размещаем кнопку ввода в третьей строке, растянув её на два столбца.
login_label = tk.Label(root, text="Логин:")
login_label.grid(row=0, column=0, sticky="e", padx=5, pady=5)

login_entry = tk.Entry(root)
login_entry.grid(row=0, column=1, padx=5, pady=5)

pass_label = tk.Label(root, text="Пароль:")
pass_label.grid(row=1, column=0, sticky="e", padx=5, pady=5)

pass_entry = tk.Entry(root, show="*")
pass_entry.grid(row=1, column=1, padx=5, pady=5)

submit_button = tk.Button(root, text="Войти")
submit_button.grid(row=2, column=0, columnspan=2, pady=10)
⚠️ Внимание: если не указывать sticky (выравнивание внутри ячейки), виджеты будут прижаты к центру. Параметры sticky="nsew" растягивают элемент на всю ячейку.
Какой виджет Tkinter вы используете чаще всего?
Кнопки (Button)
Поля ввода (Entry)
Метки (Label)
Списки (Listbox)

Стили и офармление приложения

По умолчанию tkinter использует стандартный стиль Windows, но его можно кастомизировать. Для этого изменяют параметры виджетов при создании или через метод config().

Основные атрибуты для настройки:

АтрибутОписаниеПример значений
bg / backgroundЦвет фона"#ffffff", "white"
fg / foregroundЦвет текста"#000000", "black"
fontШрифт (семейство, размер, стиль)("Arial", 12, "bold")
reliefСтиль границы"groove", "raised"
bd / borderwidthТолщина границы2

Пример кастомизации кнопки:

button = tk.Button(
 root,
 text="Нажми меня",
 bg="#4CAF50",
 fg="white",
 font=("Verdana", 10, "bold"),
 relief="raised",
 bd=3,
 padx=20,
 pady=10
)

Стили в Tkinter наследуются от родительского виджета. Чтобы изменить стиль всех кнопок, настройте параметры корневого окна root

Обработка событий: клики, ввод с клавиатуры

В tkinter события привязываются к виджетам с помощью метода bind(). Это позволяет не только на клики, но и на нажатия клавиш, перемещение мыши и другие действия.

Пример привязки функции к клику по кнопке мыши:

def on_click(event):
 print(f"Клик по координатам: {event.x}, {event.y}")

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=300, bg="white")
canvas.pack()
canvas.bind("", on_click) # Левая кнопка мыши
root.mainloop()

Для клавиатуры используют события вроде "<Key>" (любая клавиша), "<Return>" (Enter), "<Escape>" (Esc). Пример обработки нажатия на Enter:

entry = tk.Entry(root)
entry.pack()
entry.bind("", lambda e: print("Нажат Enter"))
Список основных событий Tkinter

Событие <Button-1> — клик левой кнопкой мыши|<Button-3> — клик правой кнопкой|<Double-Button-1> — двойной клик|<Key> — нажатие любой клавиши|<Motion> — перемещение мыши|<Enter> — наведение курсора на виджет|<Leave> — увод курсора с виджета

Сборка приложения в для Windows

Чтобы пользователи могли запускать ваше приложение без установки Python, его нужно скомпилировать в исполняемый файл .exe. Для этого используют утилиту PyInstaller. Установите её через pip:

pip install pyinstaller

Затем в командной строке выполните:

pyinstaller --onefile --windowed ваш_скрипт.py

Флаги:

  • --onefile — создаёт один .exe-файл (вместо папки с множеством файлов).
  • --windowed — скрывает консольное окно (важно для GUI-приложений).
  • --icon=icon.ico — добавляет иконку к .exe-файлу.

Готовый .exe будет в папке dist. Проверьте его на чистой машине без Python — если всё работает, можно распространять.

Чек-лист перед сборкой exon

Выполнено: 0 / 4

Часто задаваемые вопросы

Нужно ли устанавливать отдельно?

Нет, tkinter входит в стандартную библиотеку Python. Однако на некоторых системах (например, минимальные установки Linux) может потребоваться доустановить пакет python3-tk. На с официального сайта tkinter уже включён.

Как изменить иконку окна?

Используйте метод iconbitmap() для главного окна. Иконка должна быть в формате .ico. Пример: root.iconbitmap("app.ico"). Для .exe-файла укажите иконку через флаг --icon в PyInstaller.

Можно ли в создать модальное окно?

Да, для этого используйте класс Toplevel и метод grab_set(). Пример:
modal = tk.Toplevel(root)
modal.grab_set() — пока модальное окно открыто, пользователь не может взаимодействовать с главным окном.

Почему приложение не запускается после сборки в EXE?

Чаще всего проблема в отсутствующих файлах (изображения, шрифты) или в абсолютных путях. Убедитесь, что все ресурсы включены в папку с .exe или используйте --add-data в PyInstaller. Также проверьте консоль на наличие ошибок (уберите флаг --windowed для отображения консоли).