Собирать свои собственные проекты — это всегда круто, а когда программа обзаводится красивым окном, становится ещё приятнее! Графический интерфейс делает ваше приложение удобным и понятным даже тем, кто далёк от программирования. В этой статье я покажу, как буквально за пару шагов создать своё первое GUI-приложение на Python, и параллельно познакомлю вас с Tkinter — базовой библиотекой для написания оконных программ.
Что будем делать
Для примера я выбрал проверенную классику — приложение для списка дел (To-Do List). Такой проект идеально подходит новичкам: он простой, нагляден и отлично объясняет основные принципы разработки. А если результат понравится — смело используйте его в реальной жизни, поверьте, это действительно удобно!
Если хочется немного потренироваться, сначала попробуйте такую задачу для консоли на Python — так будет проще понять, как всё устроено. Но и без этого не переживайте: каждый шаг я разберу подробно и объясню простыми словами, даже если вы только начинаете.
Если чувствуете, что с основами Python пока тяжеловато — не поленитесь их освежить. Это реально поможет в освоении нового материала.
Готовим Tkinter к работе
Главное преимущество Tkinter — он уже встроен в стандартный набор Python, практически ничего не нужно докачивать. Давайте проверим: попробуйте просто импортировать модуль tkinter и посмотреть его версию.
В консоли появится номер версии (у меня, к примеру, 8.6). Если вместо этого видите ошибку — значит, модуль не установлен. В таком случае просто переустановите Python, а если вы на Linux, — установите нужный пакет через ваш менеджер пакетов.
Создаём главное окно
Если всё получилось, самое время перейти к созданию главного окна приложения — задаём его размеры и название.
Что из этого выйдет?
При запуске увидите чистое окно с заголовком «To-Do List App». Пока оно пустое, но уже следующим шагом мы добавим основные элементы управления.
Добавляем элементы интерфейса
Чтобы управляться со списком задач, нам понадобятся: строка для ввода новой задачи, пара удобных кнопок и большое поле для отображения дел. Всё это добавляем сразу после строки root.resizable(False, False).
Поле Entry — это как мини-блокнот для ввода ваших задач: задаём ширину, красивый шрифт, делаем удобные отступы. Далее подключаем кнопку для добавления задачи.
Настраиваем ширину, задаём стиль, подписываем и размещаем ее по порядку. Следом идёт Listbox, в котором будут появляться все ваши дела.
Ему тоже настраиваем размеры и другие параметры. Располагаем элементы в окне с помощью менеджера pack(): он прост и отлично подходит для быстрого старта. Если захотите чего посложнее — пригодится grid(), но сейчас обойдёмся базовым вариантом.
Когда всё запустится, увидите сверху строку для ввода, ниже — кнопку «Добавить», а под ней — просторное поле для списка дел.
С каждым шагом приложение всё больше становится похожим на полноценный органайзер.
Делаем приложение интерактивным
Сейчас у нас есть оболочка, но пока никаких действий не происходит. Исправляем! Напишем функцию, чтобы новые задачи появлялись в списке после нажатия на кнопку. Вставьте этот кусочек кода сразу после root.resizable(False, False).
Сначала берём текст из поля ввода. Проверяем — пусто там или что-то есть. Если написано — добавляем задачу в список и очищаем строку ввода, если нет — в консоли появится сообщение, что имя задачи не указано. Осталось связать нашу функцию с кнопкой.
Присваиваем кнопке функцию add_task(). Важно: указывать название функции без скобок, чтобы она не срабатывала сразу при старте программы.
Проверьте: напишите любое дело и нажмите «Добавить» — задача должна тут же появиться в списке. Также проверьте реакцию, если строка для задачи пуста.
Супер! Добавление новых задач работает, приложение ожило.
Прокачиваем функции и интерфейс
Пора делать программу действительно полезной: добавим удаление отдельных задач, возможностьочистить весь список и отмечать дела как выполненные. Начнём с удаления задач.
С помощью curselection()[0] получаем номер выбранного дела, а потом просто удаляем его из списка. Чтобы приложение не закрывалось с ошибкой, если ничего не выбрано, оборачиваем эту часть в try/except. Теперь напишем функцию для полной очистки списка.
Она просто стирает все ваши дела одним махом — от первого до последнего элемента. Следующий шаг — отмечаем задачи как завершённые.
Здесь немного хитрее: получаем выбранную задачу, смотрим — стоит ли у неё уже галочка в начале. Если нет, удаляем дело и вставляем обратно с галочкой и изменённым цветом (например, серым), чтобы было видно, что оно выполнено. Если выбрать задачу не удалось, появится сообщение в консоли. Поскольку напрямую менять текст задач в списке нельзя, используем такой обходной приём.
Осталось связать функции с новыми кнопками. Создаём отдельный Frame — своеобразный контейнер, чтобы красиво и аккуратно выстроить кнопки рядом. Этот блок кода вставьте перед root.mainloop().
Frame помогает логично сгруппировать элементы. Внутри размещаем три кнопки: удалить, очистить и отметить задачу. Здесь я использую grid(), так проще выстроить кнопки в ряд. Не забываем задать каждому элементу свою позицию и прописать команды для действий.
Теперь ваше приложение ведёт себя почти как взрослый задачник!
Последние штрихи: делаем красиво!
Функционал уже внушительный, но внешне приложение пока выглядит «сыро». Исправляем! Наводим порядок в оформлении — чтобы оно смотрелось стильно и современно. После строки root.resizable(False, False) добавьте настройку светло-серого фона всему окну.
Следующий шаг — делаем яркую шапку для приложения. Добавьте этот код сразу после функции mark_complete() — у вас появится эффектный заголовок во всю ширину окна. Затем немного стилизуем поле для добавления задач.
Для поля ввода задаём стильную рамку с эффектом GROOVE, а кнопку для добавления делаем заметной и привлекательной. Далее идём к списку задач.
Тут добавляем вертикальный Scrollbar — теперь никакая длинная очередь дел не испугает. Сам список оформляем приятнее: новые цвета, аккуратная рамка и мягкие переходы. Последний этап — приводим в порядок кнопки.
Каждая кнопка теперь со своим цветом: чтобы сразу было понятно, за что она отвечает. И в завершение — красивый футер с информацией в нижней части окна.
Для этого используем Label — он просто добавляет подходящую подпись. Запускайте готовое приложение — перед вами стильный и современный планировщик задач!
Теперь приложение выглядит аккуратно, свежо и намного профессиональнее. Полный исходный код уже лежит у меня на GitHub — скачивайте и дорабатывайте под себя.
Идей для развития масса: сохранение задач в файле, всплывающие уведомления, подключение базы данных и многое другое. Если вам интересно развиваться в Tkinter — попробуйте сделать, например, трекер расходов или просто читайте официальную документацию для вдохновения!
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь
Также подписывайтесь на нас в:
- Telegram: https://t.me/gergenshin
- Youtube: https://www.youtube.com/@gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru