Есть большой, некрасивый код который создает inline кнопки:
markup = InlineKeyboardMarkup(row_width=4)
item1 = InlineKeyboardButton("1", callback_data='1')
item2 = InlineKeyboardButton("2", callback_data='2')
item3 = InlineKeyboardButton("3", callback_data='3')
item4 = InlineKeyboardButton("4", callback_data='4')
item5 = InlineKeyboardButton("5", callback_data='5')
item6 = InlineKeyboardButton("6", callback_data='6')
item7 = InlineKeyboardButton("7", callback_data='7')
item8 = InlineKeyboardButton("8", callback_data='8')
item9 = InlineKeyboardButton("9", callback_data='9')
item10 = InlineKeyboardButton("10", callback_data='10')
item11 = InlineKeyboardButton("11", callback_data='11')
item12 = InlineKeyboardButton("12", callback_data='12')
item13 = InlineKeyboardButton("13", callback_data='13')
item14 = InlineKeyboardButton("14", callback_data='14')
item15 = InlineKeyboardButton("15", callback_data='15')
item16 = InlineKeyboardButton("16", callback_data='16')
item17 = InlineKeyboardButton("17", callback_data='17')
item18 = InlineKeyboardButton("Отмена", callback_data='Отмена')
markup.add(item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12, item13, item14,
item15, item16, item17, item18)
await callback_query.message.reply('Выберите неделю', reply_markup=markup)
Этот код можно упростить сделав через цикл
markup = InlineKeyboardMarkup(row_width=1, resize_keyboard=True)
button_list = []
for i in range(1, 17):
button_list.append(InlineKeyboardButton(f"{i}", callback_data=f"{i}"))
markup.add(*button_list, InlineKeyboardButton("Отмена", callback_data='Отмена'))
await callback_query.message.reply('Выберите неделю', reply_markup=markup)
Проблема в том что первый вариант выглядит куда лучше и хочется добиться такого же результата.