Специализированное приложение для ведения школьного дневника: календарь и заметки с функцией записи домашнего задания
Основные функции приложения:
-
Создание, редактирование и просмотр расписания уроков по дням недели 🗓️.
-
Создание, редактирование и просмотр личной информации ученика
-
Создание, редактирование и просмотр информации о преподавателях 🧑🏫.
-
Просмотр расписания в виде таблицы 📝.
-
Добавление оценок за уроки и расчет среднего балла по предметам в виде таблицы.
-
Отображение предстоящего домашнего задания в формате ToDo-списка ✅.
Технологический стек:
- Python 🐍
- SQLite 🗃️
- PyQt6 🖥️
- Qt-Designer 🛠️
- Adaptix
- Dishka
Миссия проекта:
Создать удобную платформу для ведения личного школьного дневника, которая помогает школьникам эффективно организовывать своё расписание и задания. Это приложение способствует улучшению успеваемости путём структурирования учебной информации и предоставления полезных инструментов для её анализа и контроля 🎯.
Разработано как проект для Я.Лицея
Вы можете найти готовые исполняемые файлы на странице релизов в репозитории. Просто скачайте и запустите (протестировано на Windows11, Windows10 и Arch Linux)
Если по какой-то причине вам не удается запустить бинарный файл, вы можете попробовать собрать приложение из исходного кода.
(все действия ниже выполняются в виртуальном окружении)
Требования:
- cpython версии от
3.11
до3.12
не включиьельно (было протестировано на python3.11.9
) - возможно, у вас получится собрать проект на другой версии выше чем 3.11, но это не проверялось. Ниже чем 3.11 собрать не получиться.
Чтобы собрать приложение из исходного кода, вам потребуется
- установить проект и его зависимости
pip install -e .
pip install -e ".[build]"
pip install -e ".[lint]"
pip install -e ".[test]"
- (опционально) проверить проект - может занять время.
pytest
mypy
ruff check
- собрать бинарник
pyinstaller student-journal.spec
или (если установлен make)
make all
Известные проблемы:
DLL load failed ...
Ошибка была замечена преимущественно на Windows и связана с неправильной установкой самого Qt, в случае подобной ошибки рекомендуется установить PyQt6 версии 6.7.1 вместо указанной в проекте
pip uninstall pyqt6
pip install pyqt6==6.7.1
если это не помогло, стоит попробовать сделать это несколько раз в разных виртуальных окружениях, или просто запускать проект из исходного кода, как описано ниже.
no module named PyQt6.sip...
Стоит сделать то же что и в первом случае
В случае сборки из исходного кода, вы можете запустить приложение и без сборки его в исполняемый файл, для этого вам необходимо также установить проект со всеми его зависимостями и выполнить
student_journal run gui
команда student_journal будет доступна в том виртуальном окружении где установлен пакет приложения.
вы можете также просто запустить файл
student_journal/bootstrap/entrypoint/qt.py
Некоторые замечания по поводу работы приложения:
-
Не забывайте нажать кнопку "Обновить". Например, вы можете открыть список предметов, потом добавить какой-то предмет и снова открыть список предметов. Он не отобразится там сам, нужнох нажать кнопку "Обновить", также и с большинством других виджетов, изменения будут видны только после обновления, не забывайте про это. В будущем возможно внедрение авто-обновления виджетов.
-
Вы можете добавить урок на воскресенье, и будет отображена неделя с ним в расписании, но самого урока там не будет. Это не баг. Просто обычно в воскресенье уроки не проводятся, и поэтому в таблице он не будет отображаться, в будущем мы пересмотрим это решение для улучшения UX.
-
При добавлении урока не пытайтесь сразу добавить к нему домашнее задание - будет ошибка. Прикрепить задание можно в меню редактирования урока
-
Чтобы перейти в меню редактирования урока, откройте расписание, нужную неделю и кликните по уроку 2 раза ЛКМ
-
Чтобы работать с расписанием, сначала выберите месяц и год, потом в списке - выберите неделю, будут отображены только те недели, в которых есть уроки. Чтобы добавить первый урок - перейдите в Уроки -> Добавить урок
-
Часовой пояс устанавливается автоматически на основании системного при первом запуске.
-
Все данные приложения будут лежать по пути ваш_пользователь/student_journal
-
Запуск приложения из бинарника может быть долгим, это связано с особенностями работы pyinstaller.
-
Чтобы начать сначала, удалите все данные приложения по пути
-
После заполнения тестовыми данными, уроки заполняются на текущий месяц и год
student_journal/domain
- Содержит основные сущности приложения (без логики)
student_journal/application
- Содержит основную бизнес логику приложения (
интеракторы
) - Содержит интерфейсы для адаптеров (
common
) - Содержит валидацию бизнес-данных (
invariants
) - Содержит классы ошибок бизнес логики
student_journal/adapters
- Содержит реализацию интерфейсов
application
- Содержит работу с БД
db/gateway
- Содержит схему бд
db/schema
- Содержит необходимые адаптеры для БД
db/
- Содержит ошибки уровня адаптеров
- Содержит компоненты работы с конфигами
config.py
- Содержит реализацию IdProvider
id_provider.py
- Содержит универсальный ErrorLocator
error_locator.py
student_journal/presentation
- Содержит в себе логику работы с представлением
- Содержит логику работы с Qt
- Содержит скомпилированные UI-классы
ui/
- Содержит необходимые приложению ресурсы
resource/
- Содержит виджеты приложения
widget/
student_journal/bootstrap
- Отвечает за сборку и запуск приложения
- Содержит настройки di-контейнера (
di/
) - Содержит точки входа в представления (
entrypoint/
)
tests/
- Тесты