for queueItem in queueList:
builder.row(
KeyboardButton(text=f"Видалити {queueItem[1]} | {queueItem[4]}"),
KeyboardButton(text=f"⬇ {queueItem[0]}"),
KeyboardButton(text=f"⬆ {queueItem[0]}")
)
return builder.as_markup(resize_keyboard=True)
except Exception as err:
print(err)
код, который создаёт клавиатуру и в каждом рядке по 3 кнопки, первая всегда длиннее, но почему-то resize_keyboard=True не работает и не делает ту кнопку больше, что не так?
Не так то, что вы не читаете документацию.
По-умолчанию, реплай клавиатура имеет тот же самый размер, что и клавиатура используемая телефоном, из-за этого, если кнопок мало, то они будут увеличены по вертикали. Что бы их уменьшить используется параметр resize_keyboard=True:
Requests clients to resize the keyboard vertically for optimal fit (e.g., make the keyboard smaller if there are just two rows of buttons). Defaults to false, in which case the custom keyboard is always of the same height as the app's standard keyboard.
import requests
from aiogram import Bot, Dispatcher, html
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode
from aiogram.filters import CommandStart
from aiogram.types import Message
from aiogram.utils.keyboard import KeyboardBuilder, ReplyKeyboardBuilder, ReplyKeyboardMarkup
import aiogram.dispatcher.middlewares
TOKEN = "ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ"
builder = ReplyKeyboardBuilder()
for i in range(0, 9):
builder.button(text=str(i))
builder.adjust(3, 3, 3) # сетка 3х3
reply_markup = builder.as_markup()
@dp.message()
async def echo_handler(message: Message) -> None:
try:
# Send a copy of the received message
await message.send_copy(chat_id=message.chat.id, reply_markup=reply_markup)
except TypeError:
# But not all the types is supported to be copied so need to handle it
await message.answer("Nice try!")
Causon, да. В вашем коде
return builder.as_markup(resize_keyboard=True) не работает, так как свойство resize для функции билдера as_markup идёт по дефолту, можете глянуть исходник.
Еще, как вы видите по скриншотам, у меня такая проблема отсутствует. Возможно, благодаря функции adjust и использовании билдера через button, а не row.
Я не понимаю вы хотите решить свою проблему или уже нет? Почему вы задаёте вопросы. Я бы уже попробовал разные варианты кода выше
Александр Третьяков, что значит не работает? Почитайте пожалуйста документацию Bot API. resize_keyboard по-умолчанию имеет значение False, поэтому размер кнопок и не меняется. А на вашем втором скрине кнопки уменьшились по вертикали, так как resize_keyboard выставлено в True, как и сказано в документации.
Возможно, благодаря функции adjust и использовании билдера через button, а не row.
Что значит возможно? Вы не уверены в своем ответе?
Давайте обратимся к документации:
Adjust previously added buttons to specific row sizes.
By default, when the sum of passed sizes is lower than buttons count the last one size will be used for tail of the markup. If repeat=True is passed - all sizes will be cycled when available more buttons count than all sizes
Этот метод формирует строку - сколько указать, столько и будет кнопок в строке.
Я не понимаю вы хотите решить свою проблему или уже нет? Почему вы задаёте вопросы. Я бы уже попробовал разные варианты кода выше
Какую проблему? У меня нет проблем. У меня подозрение, что вы спутали меня в автором вопроса. И нет, я этот вопрос не задавал, а только ответил на него. Я не знаю почему вы стали мне писать
Causon, я дико извиняюсь перед вами. Глаза в разные стороны) но давайте всё-таки решим вопрос автора, если вам интересно. Почему у него именно первая кнопка не такая как остальные? У вас есть мысли по этому поводу?
Александр Третьяков, почему не такая первая кнопка? У автора вопроса кнопки все одинакового размера - как и долно быть. А он хочет, что бы первая кнопка была длиннее других. Это сделать невозможно. Можно только указать количество кнопок в ряду, а они уже сами подстроят размер, что бы быть одинаковыми.
Кроме того, ни у кнопок, ни у клавиатуры нет таких аргументов, которые бы меняли размеры. За исключением resize_keyboard=True, который меняет размер по вертикали. А больше Bot API ничего не предоставляет
Causon, да, вы правы. Пошерстил документацию и ничего насчёт размеров. Хотя бы где-то есть Возможность изменить размер? Допустим, если собрать свой WebApp, там тоже все API подгонять будет?