Гид по технологиям

Как создать Pomodoro‑таймер на Python с Tkinter

5 min read Python Обновлено 06 Jan 2026
Pomodoro‑таймер на Python с Tkinter
Pomodoro‑таймер на Python с Tkinter

Введение: что такое Pomodoro и зачем он нужен

Pomodoro — это метод управления временем, разработанный Франческо Чирилло. Он делит работу на интервалы: стандартно 25 минут работы, затем 5 минут короткого перерыва. После четырёх таких циклов делается длинный перерыв (обычно 20 минут). Метод помогает повысить фокус, уменьшить отвлечения и снизить эффект многозадачности.

Кратко: Pomodoro мотивирует регулярными паузами и структурирует работу в повторяющиеся циклы.

Что потребуется

  • Python 3.6+ (рекомендуется 3.8 или выше).
  • Библиотека Tkinter — стандартная GUI‑библиотека для Python. На Windows и macOS Tkinter обычно уже установлен вместе с Python. В Linux установите пакет: sudo apt install python3-tk.
  • Модуль math (входит в стандартную библиотеку).

Примечание: команда pip install tkinter часто не работает — лучше использовать системный пакет для вашей ОС.

Полный рабочий код приложения

Ниже собран полный рабочий пример Pomodoro‑таймера с корректными проверками и комментариями на русском. Скопируйте в файл pomodoro.py и запустите: python3 pomodoro.py

from tkinter import *
import math

# --- Конфигурация времени (в минутах) ---
WORK_MIN = 25
SHORT_BREAK_MIN = 5
LONG_BREAK_MIN = 20

reps = 0
timer = None

# --- Сброс таймера ---
def reset_timer():
    global reps, timer
    # Включаем кнопку «Start» снова
    start_button["state"] = "normal"
    # Если таймер запущен, отменяем callback
    if timer is not None:
        root.after_cancel(timer)
        timer = None
    # Сбрасываем текст таймера
    canvas.itemconfig(timer_text, text="00:00")
    title_label.config(text="Timer", fg='#A020F0')
    check_marks.config(text="")
    reps = 0

# --- Запуск таймера (определение типа сессии) ---
def start_timer():
    global reps
    # Блокируем кнопку «Start», чтобы не создавать параллельные таймеры
    start_button["state"] = "disabled"

    reps += 1

    work_sec = WORK_MIN * 60
    short_break_sec = SHORT_BREAK_MIN * 60
    long_break_sec = LONG_BREAK_MIN * 60

    # После 8 повторений — длинный перерыв (два рабочих цикла считаются как один полный цикл)
    if reps % 8 == 0:
        count_down(long_break_sec)
        title_label.config(text="Long Break", fg='#1976D2')
    elif reps % 2 == 0:
        # Чередование работа/короткий перерыв
        count_down(short_break_sec)
        title_label.config(text="Short Break", fg='#2E8B57')
    else:
        count_down(work_sec)
        title_label.config(text="Work", fg='#E7305B')

# --- Обратный отсчёт ---
def count_down(count):
    global timer

    count_min = math.floor(count / 60)
    count_sec = count % 60
    if count_sec < 10:
        count_sec = f"0{count_sec}"

    canvas.itemconfig(timer_text, text=f"{count_min}:{count_sec}")

    if count > 0:
        # Запланировать следующую итерацию через 1000 мс
        timer = root.after(1000, count_down, count - 1)
    else:
        # Сессия завершена — запускаем следующую автоматически
        start_button["state"] = "normal"
        start_timer()
        # Обновляем галочки (количество завершённых рабочих сессий)
        marks = ""
        work_sessions = math.floor(reps / 2)
        for _ in range(work_sessions):
            marks += "✓"
        check_marks.config(text=marks)

# --- UI: создаём главное окно ---
root = Tk()
root.title("Pomodoro Timer Application")
root.config(padx=100, pady=50, bg="#f7f5dd")

# Заголовок
title_label = Label(text="Timer", fg='#A020F0', bg="#f7f5dd", font=("Arial", 50))
title_label.grid(column=1, row=0)

# Канвас с изображением (файл tomato.png должен быть в той же папке)
canvas = Canvas(width=200, height=224, highlightthickness=0)
try:
    tomato_img = PhotoImage(file="tomato.png")
    canvas.create_image(100, 112, image=tomato_img)
except Exception:
    # Если изображение не найдено — пропустить, но таймер будет работать
    pass

timer_text = canvas.create_text(100, 130, text="00:00", fill="white", font=("Arial", 35, "bold"))
canvas.grid(column=1, row=1)

# Кнопки
start_button = Button(text="Start", highlightthickness=0, command=start_timer, bg="#e7305b", font=("arial", 15, "bold"))
start_button.grid(column=0, row=2)

reset_button = Button(text="Reset", highlightthickness=0, command=reset_timer, bg="#e7305b", font=("arial", 15, "bold"))
reset_button.grid(column=2, row=2)

# Метки завершённых рабочих сессий
check_marks = Label(text="", fg='#00FF00', bg="#f7f5dd", font=("arial", 25, "bold"))
check_marks.grid(column=1, row=3)

root.mainloop()

Важно: если у вас нет файла tomato.png, приложение всё равно запустится (обёрнуто try/except). Файл изображения оставьте в той же папке, чтобы он загружался корректно.

Как работает код — короткая разбивка

  • Переменные WORK_MIN, SHORT_BREAK_MIN и LONG_BREAK_MIN задают длительности в минутах. Измените их для кастомизации.
  • reps считает число сессий (каждая сессия — это либо работа, либо перерыв). По остаткам от деления определяется тип следующей сессии.
  • start_button блокируется, чтобы пользователь не начал новый таймер, пока старый не запущен.
  • count_down использует root.after для планирования вызовов через 1000 мс — это стандартный способ реализовать таймер в Tkinter.
  • reset_timer отменяет текущий callback (если он есть) и возвращает интерфейс в исходное состояние.

Настройки и вариации (мини‑методология)

Вы можете адаптировать Pomodoro под себя:

  • Короткие циклы: WORK_MIN = 50, SHORT_BREAK_MIN = 10 (техника «50/10»).
  • Микро‑Pomodoro: WORK_MIN = 10, SHORT_BREAK_MIN = 2 — для сложных задач с низкой мотивацией.
  • Изменяйте LONG_BREAK_MIN после 3 или 4 циклов, в зависимости от уровня усталости.

Правило: подбирайте длительности эмпирически — начните с 25/5/20 и меняйте по ощущениям.

Когда Pomodoro не подходит — контрпримеры

  • Работа, требующая «flow» на несколько часов (напр., глубокое кодирование или исследование): прерывания каждые 25 минут могут снижать продуктивность. В таких случаях лучше планировать длинные блоки работы (time blocking) с 1–2 перерывами.
  • Нелинейные задачи, зависящие от внешних событий (онколы в реальном времени, администрирование): Pomodoro может быть неэффективным.

Альтернативные подходы

  • Time blocking — планирование длинных, тематических блоков в календаре.
  • Flowtime — сохраняется принцип перерывов, но пользователь сам завершает блок, когда в «потоке».
  • Канбан + интервалы — комбинируйте карточки задач с Pomodoro для учёта времени по задачам.

Факт‑бокс: ключевые числа

  • Стандартный цикл: 25 мин работы / 5 мин перерыва.
  • Длинный перерыв: 20 мин после четырёх циклов.
  • 4 рабочих сессии = 1 полный цикл с последующим длинным перерывом.

Критерии приёмки (Test cases / Acceptance criteria)

  1. При нажатии Start кнопка становится недоступна.
  2. Таймер отсчитывает время в формате mm:ss и обновляет число каждую секунду.
  3. При достижении нуля автоматом запускается следующая сессия (короткий/длинный/рабочий) в соответствии с логикой.
  4. При нажатии Reset таймер останавливается, текст сбрасывается на 00:00, счётчик reps = 0, галочки очищаются.
  5. При отсутствии изображения приложение всё равно стартует без ошибки.

Ролевые чек‑листы (кратко)

  • Для студента:

    • Установить приложение и проверить звук/уведомления (если добавлены).
    • Настроить WORK_MIN = 25, SHORT_BREAK_MIN = 5.
    • Планировать 2–4 Pomodoro на сессию учёбы.
  • Для разработчика:

    • Добавить логирование старта/остановки сессий.
    • Сделать экспорт истории в CSV.
    • Добавить горячие клавиши (Start/Reset).
  • Для менеджера/координатора:

    • Настроить общую политику: 25/5/20 или 50/10.
    • Поощрять команду делать совместные длинные перерывы.

SOP — как пользоваться приложением (коротко)

  1. Откройте pomodoro.py в каталоге с tomato.png (опционально).
  2. Запустите python3 pomodoro.py.
  3. Нажмите Start — начнётся рабочая сессия.
  4. По завершении сессии приложение автоматически перейдёт на перерыв.
  5. Для полного сброса нажмите Reset.

Тестовые сценарии (примерные)

  • Функциональный: старт/сброс/автоматический переход и отображение галочек.
  • UI: проверка размещения элементов при разных размерах окна.
  • Ошибки: отсутствие файла изображения, многократные клики Start, одновременное открытие нескольких окон.

Советы по локализации и дизайну для русскоязычных пользователей

  • Шрифты: Arial и стандартные системные шрифты хорошо отображаются на Windows и macOS; для Linux можно добавить запасной шрифт.
  • Подписи и кнопки: замените текст “Start”/“Reset” на “Старт”/“Сброс” в UI, если нужно локализовать интерфейс.
  • Формат времени: mm:ss универсален — не меняйте порядок.

Возможные улучшения и расширения (идеи)

  • Звук и уведомления при переходе между сессиями.
  • Логирование и история (CSV или SQLite) для подсчёта выполненных Pomodoro.
  • Настройка пользовательских длительностей и профилей (студент/разработчик).
  • Интеграция с календарём или трекером задач (Trello, Todoist).

Короткое объявление (100–200 слов)

Готовый Pomodoro‑таймер на Python с графическим интерфейсом Tkinter — простой инструмент для повышения фокусировки и борьбы с прокрастинацией. Приложение использует метод Pomodoro: 25 минут работы, 5 минут короткого перерыва и 20 минут длительного отдыха после четырёх циклов. В статье представлен полный рабочий код, объяснение ключевых функций, тест‑кейсы и чек‑листы для студентов, разработчиков и менеджеров. Код легко адаптировать: смените длительности, добавьте звуковые уведомления или экспорт истории. Для запуска нужен Python 3 и модуль tkinter (в большинстве систем уже установлен). Скопируйте файл, запустите и начните структурировать своё время с первого же интервала.

Краткое резюме

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

Важное: проверяйте совместимость tkinter для вашей ОС и при необходимости используйте системный пакет для установки.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство