S
S
Studentka19962020-08-11 18:17:09
Python
Studentka1996, 2020-08-11 18:17:09

Why does the loop display the buttons incorrectly?

if 'ВсеТовары' in text:
        call_kat = text.split('ВсеТовары_')[-1]
        print(call_kat)
        #Если выбрано действие "Все товары" - показать все товары выбранной категории
        connect_cursor.execute(f'''SELECT DISTINCT Ф.Имя, GROUP_CONCAT(Объем || Цена_руб), Описание, Состав, В_наличие, Расширение, Путь_к_файлу 
        FROM Товар Т JOIN Фото Ф ON Т.Товар = Ф.Имя
            JOIN Атрибут_товара А ON Т.Код_атрибута= А.Код WHERE Категория = "Салат" GROUP BY Ф.Имя''') 
        rows = connect_cursor.fetchall()
        keyb_addKorzina = telebot.types.InlineKeyboardMarkup() 
        for i in rows:
            ls_atr = []
            for atr in i[1].split(','):
                ls_atr.append(telebot.types.InlineKeyboardButton(text=atr, callback_data=f'ВыбратьАтрибут_{atr}'))
            keyb_addKorzina.add(*ls_atr)
            rez_info = f'*Наименование: {i[0]}*\n Описание: {i[4]}\n{i[3]}\n'
            #Отправить фото и текст боту
            with open(f'{i[6]}/{i[0]}{i[5]}', "rb") as file: 
                #Если товар в наличии
                if int(i[4]) == 1:  
                    #send_photo считывает файл и возвращает содержимое файла
                    bot.send_photo(message.chat.id, file.read(), rez_info + '----------\U00002705 В наличие',  parse_mode="Markdown", reply_markup = keyb_addKorzina)  
                elif int(i[4]) == 0:  
                    bot.send_photo(message.chat.id, file.read(), rez_info + '----------\U00002757 Товар закончился', parse_mode="Markdown")


Result:
5f32b60925dd6063581016.png
5f32b612a23a4445171575.png
5f32b6db66ff5862225726.png

There should be a conclusion . 5f32b657f0b8a207428512.png

I'm trying to do it myself, it doesn't work ..... Please help ((

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
soremix, 2020-08-11
@Studentka1996

You reset the list at the beginning of each cycle, and do not reset the keyboard

if 'ВсеТовары' in text:
        call_kat = text.split('ВсеТовары_')[-1]
        print(call_kat)
        #Если выбрано действие "Все товары" - показать все товары выбранной категории
        connect_cursor.execute(f'''SELECT DISTINCT Ф.Имя, GROUP_CONCAT(Объем || Цена_руб), Описание, Состав, В_наличие, Расширение, Путь_к_файлу 
        FROM Товар Т JOIN Фото Ф ON Т.Товар = Ф.Имя
            JOIN Атрибут_товара А ON Т.Код_атрибута= А.Код WHERE Категория = "Салат" GROUP BY Ф.Имя''') 
        rows = connect_cursor.fetchall()
         
        for i in rows:
            keyb_addKorzina = telebot.types.InlineKeyboardMarkup()
            ls_atr = []
            for atr in i[1].split(','):
                ls_atr.append(telebot.types.InlineKeyboardButton(text=atr, callback_data=f'ВыбратьАтрибут_{atr}'))
            keyb_addKorzina.add(*ls_atr)
            rez_info = f'*Наименование: {i[0]}*\n Описание: {i[4]}\n{i[3]}\n'
            #Отправить фото и текст боту
            with open(f'{i[6]}/{i[0]}{i[5]}', "rb") as file: 
                #Если товар в наличии
                if int(i[4]) == 1:  
                    #send_photo считывает файл и возвращает содержимое файла
                    bot.send_photo(message.chat.id, file.read(), rez_info + '----------\U00002705 В наличие',  parse_mode="Markdown", reply_markup = keyb_addKorzina)  
                elif int(i[4]) == 0:  
                    bot.send_photo(message.chat.id, file.read(), rez_info + '----------\U00002757 Товар закончился', parse_mode="Markdown")

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question