Возможно, благодаря функции 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
Я не понимаю вы хотите решить свою проблему или уже нет? Почему вы задаёте вопросы. Я бы уже попробовал разные варианты кода выше