1
0
Fork 0
mirror of https://github.com/EDeev/school_table.git synced 2026-10-07 20:49:37 +03:00

Compare commits

..

No commits in common. "main" and "v1.0.0" have entirely different histories.
main ... v1.0.0

4 changed files with 11 additions and 83 deletions

View file

@ -16,10 +16,10 @@ jobs:
python-version: "3.12"
- run: pip install pyinstaller -r requirements.txt
- name: Сборка .exe
run: pyinstaller --onefile --windowed --icon image.ico --add-data "table.db;." --add-data "image.ico;." --name SchoolTable main.py
run: pyinstaller --onefile --windowed --icon image.ico --name SchoolTable main.py
- name: Архив с программой, пустой базой и иконкой
run: Compress-Archive -Path dist/SchoolTable.exe, table.db, image.ico -DestinationPath SchoolTable-windows.zip
- name: Файл в релиз
env:
GH_TOKEN: ${{ github.token }}
run: gh release upload "${{ github.ref_name }}" dist/SchoolTable.exe SchoolTable-windows.zip --clobber
run: gh release upload "${{ github.ref_name }}" SchoolTable-windows.zip --clobber

View file

@ -8,7 +8,7 @@
A desktop student planner on PyQt5: a weekly timetable and dated notes that show up under the right day
on their own. The interface is in Russian.
**Status:** coursework (Yandex Lyceum, 2021), completed
**Status:** coursework (2021), completed
![Timetable tab](docs/screenshots/timetable.png)
@ -26,9 +26,9 @@ on their own. The interface is in Russian.
## Running
A ready-made Windows build is in the [releases](https://github.com/EDeev/school_table/releases):
`SchoolTable.exe` — just run it (an empty `table.db` and the icon appear next to it on first start), or
`SchoolTable-windows.zip` — the same with the database and icon in an archive.
A ready-made Windows build is `SchoolTable-windows.zip` in the
[releases](https://github.com/EDeev/school_table/releases): unpack it and run `SchoolTable.exe` (keep
`table.db` next to it).
From source:
@ -44,7 +44,7 @@ python main.py
## License
Coursework (Yandex Lyceum, 2021). The code is open for study; there is no separate license.
Coursework (2021). The code is open for study; there is no separate license.
## Author

View file

@ -8,7 +8,7 @@
Десктопный дневник школьника на PyQt5: расписание на неделю и заметки с датами, которые сами
появляются под нужным днём.
**Статус:** учебный проект (Яндекс Лицей, 2021), завершён
**Статус:** учебный проект (2021), завершён
![Вкладка «Расписание»](docs/screenshots/timetable.png)
@ -26,9 +26,8 @@
## Запуск
Готовая сборка для Windows — в [релизах](https://github.com/EDeev/school_table/releases): `SchoolTable.exe` — просто
запустите (при первом запуске рядом появятся пустая база `table.db` и иконка), или `SchoolTable-windows.zip` — то же
с базой и иконкой в архиве.
Готовая сборка для Windows — `SchoolTable-windows.zip` в [релизах](https://github.com/EDeev/school_table/releases):
распакуйте и запустите `SchoolTable.exe` (база `table.db` должна лежать рядом).
Из исходников:
@ -53,7 +52,7 @@ image.ico иконка
## Лицензия
Учебный проект (Яндекс Лицей, 2021). Код открыт для изучения, отдельной лицензии нет.
Учебный проект (2021). Код открыт для изучения, отдельной лицензии нет.
## Автор

71
main.py
View file

@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
import datetime as dt
import os
import shutil
import sqlite3
import sys
@ -927,76 +926,11 @@ class Ui_MainWindow(object):
i.setTabText(i.indexOf(j[0]), _translate("MainWindow", j[1]))
def configure_accessibility(self):
"""Provide accessible names and descriptions for assistive technologies."""
table_names = {
self.Mon_school: "Расписание на понедельник",
self.Tue_school: "Расписание на вторник",
self.Wed_school: "Расписание на среду",
self.Thu_school: "Расписание на четверг",
self.Fri_school: "Расписание на пятницу",
self.Sat_school: "Расписание на субботу",
self.Mon_note: "Заметки на понедельник",
self.Tue_note: "Заметки на вторник",
self.Wed_note: "Заметки на среду",
self.Thu_note: "Заметки на четверг",
self.Fri_note: "Заметки на пятницу",
self.Sat_note: "Заметки на субботу",
self.maintable: "Список заметок",
}
for table, name in table_names.items():
table.setAccessibleName(name)
table.setAccessibleDescription(
"Таблица доступна с клавиатуры. Используйте стрелки для просмотра ячеек."
)
field_names = {
self.weekday1: "День недели для добавления предмета",
self.object1: "Номер урока для добавления предмета",
self.add_line: "Название нового предмета",
self.choose_obj1: "Предмет для добавления в расписание",
self.choose_obj2: "Предмет для переименования",
self.upd_line: "Новое название предмета",
self.choose_obj3: "Предмет для удаления",
self.weekday3: "День недели для очистки урока",
self.object3: "Номер урока для очистки",
self.choose_obj4: "Предмет для выделения в расписании",
self.choosedate: "Период показа заметок",
self.choose: "Заметка для выполнения",
self.write: "Текст новой заметки",
self.date_1: "Дата и время новой заметки",
self.choose_2: "Заметка для редактирования",
self.write_2: "Новый текст заметки",
self.date_2: "Новая дата и время заметки",
}
for widget, name in field_names.items():
widget.setAccessibleName(name)
button_descriptions = {
self.add_but: "Добавляет выбранный предмет в расписание.",
self.del_but: "Удаляет выбранный предмет из списка предметов и из расписания.",
self.upd_but: "Переименовывает выбранный предмет.",
self.clear_but: "Очищает выбранный урок в расписании.",
self.check_but1: "Выделяет выбранный предмет в расписании.",
self.check_but2: "Снимает выделение выбранного предмета.",
self.check_but3: "Очищает выделение предметов.",
self.showing: "Показывает заметки за выбранный период.",
self.complete: "Отмечает выбранную заметку как выполненную.",
self.added: "Добавляет новую заметку.",
self.demonstr: "Показывает выбранную заметку для редактирования.",
self.updat: "Сохраняет изменения выбранной заметки.",
}
for button, description in button_descriptions.items():
button.setAccessibleName(button.text())
button.setAccessibleDescription(description)
# ОСНОВНОЕ ТЕЛО ПРОГРАММЫ
class MyWidget(QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self) # uic.loadUi('rasp.ui', self)
self.configure_accessibility()
self.connection = sqlite3.connect("table.db")
self.cursor = self.connection.cursor()
@ -1391,11 +1325,6 @@ class MyWidget(QMainWindow, Ui_MainWindow):
if __name__ == '__main__':
# table.db ищется рядом с программой (или с .exe), а не в текущей папке терминала
os.chdir(os.path.dirname(sys.executable if getattr(sys, "frozen", False) else os.path.abspath(__file__)))
if getattr(sys, "frozen", False):
# одиночный .exe: пустая база и иконка вшиты внутрь и при первом запуске кладутся рядом
for name in ("table.db", "image.ico"):
if not os.path.exists(name):
shutil.copy(os.path.join(sys._MEIPASS, name), name)
app = QApplication(sys.argv)
ex = MyWidget()
ex.show()