@paxa-1331

Как реализовать перелистывание фотографий с описанием, по 1 штуке?

Всем привет, уже как-то искал как это сделать, с горем по полам получилось. Но хочется реально понять как это устроено, если можно с комментариями в коде.

Суть такая, в базе данных имеются такие данные: фото, название и описание.
Необходимо сделать кнопки перелистывания данных и фото кнопками "Назад" и "Вперед"

Буду ооочень благодарен если будут реальные примеры реализации. Нашел пример того что хочу, но так и не понял :( 1. Не совсем корректно работает код (не листает, выдает ошибку), так еще к тому же тут получают словарь... https://ru.stackoverflow.com/questions/1330106/pyt...

Вариант который был реализован ранее, но тут выводятся перелистывание чисто кнопок...
def test(page=1, number_page=1):
    db.commit() #обновить бд  
    c.execute("""SELECT category FROM menu_category WHERE rowid > 0 and status > 0 group by 1""")
    items = c.fetchall()
    keyboards_test = []
    list = []
    el = []
    for el in items:
        keyboards_test += el[0]
        keyboard = InlineKeyboardMarkup(row_width=2)
    if len(keyboards_test) % 6 == 0:
        page_all = len(keyboards_test) // 6
    else:
        page_all = (len(keyboards_test) // 100) + 2
    for el in items[page-1:page+5]:
        list.append(InlineKeyboardButton(text=f"{el[0]}", callback_data=f"{el[0]}"))
    keyboard.add(*list)
    if int(page_all) == 1:
        chet = types.InlineKeyboardButton(text=f"[{number_page} / {page_all}]", callback_data=f"asdad")
        keyboard.add(chet)
    elif int(number_page) == 1:
        keyboard.add(types.InlineKeyboardButton(text=f"[{number_page} / {page_all}]", callback_data=f"asdad"), types.InlineKeyboardButton(text=f"➡️", callback_data=f"jjj;{page+6};{number_page+1}"))
    elif int(number_page) == int(page_all):
       keyboard.add(types.InlineKeyboardButton(text=f"⬅️", callback_data=f"jjj;{page-6};{number_page-1}"), types.InlineKeyboardButton(text=f"[{number_page} / {page_all}]", callback_data=f"asdad"))        
    else:
        
        keyboard.add(types.InlineKeyboardButton(text=f"⬅️", callback_data=f"jjj;{page-6};{number_page-1}"), types.InlineKeyboardButton(text=f"[{number_page} / {page_all}]", callback_data=f"asdad"), types.InlineKeyboardButton(text=f"➡️", callback_data=f"jjj;{page+6};{number_page+1}")) 
    db.commit() #обновить бд 
    
    c.execute("SELECT * FROM KeyBat WHERE kbt = 'waiter' ")
    items3 = c.fetchall()
    for el in items3:
        waiter = InlineKeyboardButton(f"{el[1]}", callback_data='Официант')
    db.commit() #обновить бд 
    c.execute("SELECT * FROM KeyBat WHERE kbt = 'glav' " )
    items = c.fetchall()
    for el in items:
        next_2 = InlineKeyboardButton(f"{el[1]}", callback_data='next_2')
    keyboard.add(next_2,waiter)
    db.commit() #обновить бд 
    return keyboard
 

@dp.callback_query_handler(text_contains='jjj')
async def page_back(call: types.CallbackQuery):

    page = int(call.data.split(";")[1])
    number_page = int(call.data.split(";")[2])
    await call.message.edit_reply_markup(reply_markup=test(page, number_page))


@dp.message_handler(commands="start13")
async def start(message: types.Message):
    await message.answer("Категории:", reply_markup=test())
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
gnifajio
@gnifajio
Совершенствуюсь каждый день
Я не буду давать вам код, потому что это не фриланс.
Опишу, что вам нужно сделать:
  • Взять картинку по id из базы данных
  • Отправить ее с кнопками "Назад" и "Вперед", где callbackdata будет указывать на следующую или предыдущую картинку в базе данных.
  • Обработать callbackdata, и повторить для него предыдущие пункты
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы