Найти в Дзене
Герман Геншин

Взломай свою продуктивность: как на одном дыхании сделать стильный To-Do List на Python и Tkinter!

Собирать свои собственные проекты — это всегда круто, а когда программа обзаводится красивым окном, становится ещё приятнее! Графический интерфейс делает ваше приложение удобным и понятным даже тем, кто далёк от программирования. В этой статье я покажу, как буквально за пару шагов создать своё первое GUI-приложение на Python, и параллельно познакомлю вас с Tkinter — базовой библиотекой для написания оконных программ. Для примера я выбрал проверенную классику — приложение для списка дел (To-Do List). Такой проект идеально подходит новичкам: он простой, нагляден и отлично объясняет основные принципы разработки. А если результат понравится — смело используйте его в реальной жизни, поверьте, это действительно удобно! Если хочется немного потренироваться, сначала попробуйте такую задачу для консоли на Python — так будет проще понять, как всё устроено. Но и без этого не переживайте: каждый шаг я разберу подробно и объясню простыми словами, даже если вы только начинаете. Если чувствуете, что
Оглавление

Собирать свои собственные проекты — это всегда круто, а когда программа обзаводится красивым окном, становится ещё приятнее! Графический интерфейс делает ваше приложение удобным и понятным даже тем, кто далёк от программирования. В этой статье я покажу, как буквально за пару шагов создать своё первое GUI-приложение на Python, и параллельно познакомлю вас с Tkinter — базовой библиотекой для написания оконных программ.

Что будем делать

Для примера я выбрал проверенную классику — приложение для списка дел (To-Do List). Такой проект идеально подходит новичкам: он простой, нагляден и отлично объясняет основные принципы разработки. А если результат понравится — смело используйте его в реальной жизни, поверьте, это действительно удобно!

Если хочется немного потренироваться, сначала попробуйте такую задачу для консоли на Python — так будет проще понять, как всё устроено. Но и без этого не переживайте: каждый шаг я разберу подробно и объясню простыми словами, даже если вы только начинаете.

Если чувствуете, что с основами Python пока тяжеловато — не поленитесь их освежить. Это реально поможет в освоении нового материала.

Готовим Tkinter к работе

Главное преимущество Tkinter — он уже встроен в стандартный набор Python, практически ничего не нужно докачивать. Давайте проверим: попробуйте просто импортировать модуль tkinter и посмотреть его версию.

В консоли появится номер версии (у меня, к примеру, 8.6). Если вместо этого видите ошибку — значит, модуль не установлен. В таком случае просто переустановите Python, а если вы на Linux, — установите нужный пакет через ваш менеджер пакетов.

Создаём главное окно

Если всё получилось, самое время перейти к созданию главного окна приложения — задаём его размеры и название.

Что из этого выйдет?

При запуске увидите чистое окно с заголовком «To-Do List App». Пока оно пустое, но уже следующим шагом мы добавим основные элементы управления.

-2

Добавляем элементы интерфейса

Чтобы управляться со списком задач, нам понадобятся: строка для ввода новой задачи, пара удобных кнопок и большое поле для отображения дел. Всё это добавляем сразу после строки root.resizable(False, False).

Поле Entry — это как мини-блокнот для ввода ваших задач: задаём ширину, красивый шрифт, делаем удобные отступы. Далее подключаем кнопку для добавления задачи.

Настраиваем ширину, задаём стиль, подписываем и размещаем ее по порядку. Следом идёт Listbox, в котором будут появляться все ваши дела.

Ему тоже настраиваем размеры и другие параметры. Располагаем элементы в окне с помощью менеджера pack(): он прост и отлично подходит для быстрого старта. Если захотите чего посложнее — пригодится grid(), но сейчас обойдёмся базовым вариантом.

Когда всё запустится, увидите сверху строку для ввода, ниже — кнопку «Добавить», а под ней — просторное поле для списка дел.

-3

С каждым шагом приложение всё больше становится похожим на полноценный органайзер.

Делаем приложение интерактивным

Сейчас у нас есть оболочка, но пока никаких действий не происходит. Исправляем! Напишем функцию, чтобы новые задачи появлялись в списке после нажатия на кнопку. Вставьте этот кусочек кода сразу после root.resizable(False, False).

Сначала берём текст из поля ввода. Проверяем — пусто там или что-то есть. Если написано — добавляем задачу в список и очищаем строку ввода, если нет — в консоли появится сообщение, что имя задачи не указано. Осталось связать нашу функцию с кнопкой.

Присваиваем кнопке функцию add_task(). Важно: указывать название функции без скобок, чтобы она не срабатывала сразу при старте программы.

Проверьте: напишите любое дело и нажмите «Добавить» — задача должна тут же появиться в списке. Также проверьте реакцию, если строка для задачи пуста.

-4

Супер! Добавление новых задач работает, приложение ожило.

Прокачиваем функции и интерфейс

Пора делать программу действительно полезной: добавим удаление отдельных задач, возможностьочистить весь список и отмечать дела как выполненные. Начнём с удаления задач.

С помощью curselection()[0] получаем номер выбранного дела, а потом просто удаляем его из списка. Чтобы приложение не закрывалось с ошибкой, если ничего не выбрано, оборачиваем эту часть в try/except. Теперь напишем функцию для полной очистки списка.

Она просто стирает все ваши дела одним махом — от первого до последнего элемента. Следующий шаг — отмечаем задачи как завершённые.

Здесь немного хитрее: получаем выбранную задачу, смотрим — стоит ли у неё уже галочка в начале. Если нет, удаляем дело и вставляем обратно с галочкой и изменённым цветом (например, серым), чтобы было видно, что оно выполнено. Если выбрать задачу не удалось, появится сообщение в консоли. Поскольку напрямую менять текст задач в списке нельзя, используем такой обходной приём.

Осталось связать функции с новыми кнопками. Создаём отдельный Frame — своеобразный контейнер, чтобы красиво и аккуратно выстроить кнопки рядом. Этот блок кода вставьте перед root.mainloop().

Frame помогает логично сгруппировать элементы. Внутри размещаем три кнопки: удалить, очистить и отметить задачу. Здесь я использую grid(), так проще выстроить кнопки в ряд. Не забываем задать каждому элементу свою позицию и прописать команды для действий.

Теперь ваше приложение ведёт себя почти как взрослый задачник!

Последние штрихи: делаем красиво!

Функционал уже внушительный, но внешне приложение пока выглядит «сыро». Исправляем! Наводим порядок в оформлении — чтобы оно смотрелось стильно и современно. После строки root.resizable(False, False) добавьте настройку светло-серого фона всему окну.

Следующий шаг — делаем яркую шапку для приложения. Добавьте этот код сразу после функции mark_complete() — у вас появится эффектный заголовок во всю ширину окна. Затем немного стилизуем поле для добавления задач.

Для поля ввода задаём стильную рамку с эффектом GROOVE, а кнопку для добавления делаем заметной и привлекательной. Далее идём к списку задач.

Тут добавляем вертикальный Scrollbar — теперь никакая длинная очередь дел не испугает. Сам список оформляем приятнее: новые цвета, аккуратная рамка и мягкие переходы. Последний этап — приводим в порядок кнопки.

Каждая кнопка теперь со своим цветом: чтобы сразу было понятно, за что она отвечает. И в завершение — красивый футер с информацией в нижней части окна.

Для этого используем Label — он просто добавляет подходящую подпись. Запускайте готовое приложение — перед вами стильный и современный планировщик задач!

-5

Теперь приложение выглядит аккуратно, свежо и намного профессиональнее. Полный исходный код уже лежит у меня на GitHub — скачивайте и дорабатывайте под себя.

Идей для развития масса: сохранение задач в файле, всплывающие уведомления, подключение базы данных и многое другое. Если вам интересно развиваться в Tkinter — попробуйте сделать, например, трекер расходов или просто читайте официальную документацию для вдохновения!

Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!

Премиум подписка - это доступ к эксклюзивным материалам, чтение канала без рекламы, возможность предлагать темы для статей и даже заказывать индивидуальные обзоры/исследования по своим запросам!Подробнее о том, какие преимущества вы получите с премиум подпиской, можно узнать здесь

Также подписывайтесь на нас в: