ДВС, уважаемые пользователи!
Работаю учителем физики, для собственных нужд написал телеграмм бота.
Назначение - отработка физических величин, единиц измерения и формул.
Логика работы бота следующая.
Например, ученик выбрал раздел "Формулы".
Беру из БД случайные четыре формулы (Latex), которые отрисовываю с помощью matplotlib и сохраняю в файл.
async def make_png(items, user_id):
text_list = []
for i in range(len(items)):
f = rf'$ {i + 1}.\ {items[i]}$'
text_list.append(f)
path = f'{user_id}_task.png'
text = '\n'.join(text_list)
### Создание области отрисовки
fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])
ax.set_axis_off()
### Отрисовка формулы
t = ax.text(0.1, 0.5, text,
horizontalalignment='left',
verticalalignment='center',
fontsize=10, color='black')
### Определение размеров формулы
ax.figure.canvas.draw()
bbox = t.get_window_extent()
# Установка размеров области отрисовки
fig.set_size_inches(bbox.width / 80, bbox.height / 80) # dpi=80
### Отрисовка или сохранение в файл
plt.savefig(f'{user_id}_task.png', dpi=300, )
Далее это изображение отправляется пользователю вместе с клавиатурой InlineKeyboard.
После правильного выбора варианта ответа файлик удаляется. Всё работает. Но я понимаю, что это коряво.
Например, формулы в изображении разного размера, что не критично с точки зрения функциональности, но некрасиво.
Подскажите, есть ли другие варианты, как можно это реализовать?
Ключевые требования:
случайные формулы ставятся в случайном порядке;
ученик должен каким-либо образом выбрать подходящий вариант с помощью кнопок
производительность (хотя, нагрузка не очень большая - max 30 человек в течение суток).
Благодарю за ответы.