Quick & dirty utility I built in one evening to generate date sequences for my recurring lessons. Sharing it in case someone else finds it useful!
-
Установите зависимости и активируйте виртуальное окружение (если используете).
-
Самый быстрый путь — запустить файл
run_gui.bat(двойной клик в проводнике). Он подхватит локальное виртуальное окружение и откроет окно. -
Можно стартовать напрямую через Python:
python schedule_gui.py
-
Либо оставить единый файл:
python schedule_generator.py
-
В окне доступны:
- календарь с навигацией по месяцам — просто кликните нужный день, он попадёт в поле «Дата начала»;
- чекбоксы дней недели (можно отметить понедельник/пятницу/субботу и др.);
- современная тёмная тема, которая не слепит по вечерам;
- поля для количества занятий, формата даты и разделителя отображения;
- поле формата даты использует стандарт
strftime: по умолчанию выводится%d.%m(без года), но можно ввести, например,%d.%m.%Yили%d %b; - окно всегда остаётся на панели задач; чтобы показывался собственный значок, рядом с
schedule_generator.pyположитеicon.icoилиlogo.ico(такжеicon.png/logo.pngдля окна); при желании можно включить кастомную рамку, переключив константуUSE_BORDERLESS_WINDOW, либо значок в системном трее черезENABLE_SYSTEM_TRAY.
Рекомендации по иконке
- Формат
.icoобязателен для панели задач Windows; добавьте также.pngдля окна Tk.- Название файлов:
icon.ico/icon.png(илиlogo.ico/logo.png) в том же каталоге, что иschedule_generator.py.- Сгенерируйте ICO с несколькими квадратными слоями: 16×16, 32×32, 48×48, 64×64 и 256×256 пикселей.
- Цветовое пространство — 32-бит (RGBA) с прозрачностью; избегайте палитр ≤256 цветов.
- Файл должен весить не более нескольких сотен килобайт и не содержать EXIF/ICC профилей.
Если есть только исходная картинка (например, branding.png), запустите вспомогательный скрипт — он сделает совместимые logo.ico и logo.png:
python tools/generate_icon.py branding.pngПо умолчанию файлы появятся в корне проекта; при необходимости задайте другой путь через --output-dir.
- выпадающий список «Разделитель при копировании» (по умолчанию табуляция для корректной вставки в Excel по столбцам);
- кнопка «Сгенерировать» и отдельная кнопка «Скопировать в Excel», которую теперь можно нажимать сколько угодно раз — она берёт последнюю строку и копирует её с выбранным разделителем в буфер обмена.
Также можно явно указать флаг --gui, если запуск идёт с другими параметрами: python schedule_generator.py --gui.
-
В каталоге
distпосле сборки лежит единый файлDater.exe. Его можно перенести на любой компьютер с Windows и запускать без установки Python. -
Чтобы собрать EXE самостоятельно, запустите
build.bat(двойной клик в проводнике) или выполните вручную:.venv\Scripts\pyinstaller.exe --clean Dater.spec
-
При сборке PyInstaller автоматически упакует
icon.pngиicon.ico(илиlogo.png/logo.icoесли они есть), а.icoстанет иконкой EXE и значком окна/панели задач.
- Запускайте
run_gui.bat— при ошибке окно консоли не закроется, а в каталоге появится файлschedule_gui_errors.logс подробностями. - Типичная проблема на Windows — Python установлен без компонента Tcl/Tk. При появлении ошибки
Can't find a usable init.tclпереустановите Python с официального сайта, отметив галочку "tcl/tk and IDLE", либо установите пакетtcl/tkотдельно и перезапуститеrun_gui.bat. - Любые необработанные ошибки также попадут в
schedule_gui_errors.log; приложите его содержимое, если нужно поделиться стек-трейсом.
python schedule_generator.py --start 2025-11-01 --weekdays пн пт сб --lessons 12Опции:
--start— дата начала оплаты. Поддерживаются форматы2025-11-01,01.11.2025,01/11/2025,01-11-2025,01.11.25,2025/11/01.--weekdays— перечисление дней недели через пробел. Можно использовать русские или английские варианты:пн,понедельник,mon,monday, и т. д.--lessons— сколько занятий нужно получить (например, количество уроков в месяце).--delimiter(необяз.) — чем разделять даты в итоговой строке. По умолчанию;, удобно вставлять в одно поле Excel.--date-format(необяз.) — формат вывода дат (синтаксисstrftime). По умолчанию"%d.%m"→01.11. Можно ввести любой шаблон вроде%d.%m.%Y, если нужен год.
Вход:
python schedule_generator.py --start 2025-11-01 --weekdays пн пт сб --lessons 9 --delimiter "\t"Вывод (одно поле, разделённое табуляцией):
01.11 03.11 07.11 08.11 10.11 14.11 15.11 17.11 21.11
Эту строку можно целиком вставить в Excel — каждая дата окажется в отдельной ячейке по горизонтали.