Трудно дать ответ с учетом вашего кода, потому что не все переменные определены в предоставленном вами фрагменте. Но вот общий способ добиться этого с помощью QGridLayout. Что вы делаете, это удалите каждую кнопку в строке, замените ее на QSpacerItem и вставьте кнопку в новый столбец на другой стороне. Попробуйте запустить этот пример и посмотрите, сможете ли вы адаптировать его под свой код:
class Template(QWidget):
def __init__(self):
super().__init__()
self.grid = QGridLayout(self)
self.grid.setHorizontalSpacing(0)
for row in range(4):
for col in range(4):
self.grid.addWidget(QPushButton(str(row)), row, col)
for i in range(4):
btn = QPushButton('>')
btn.clicked.connect(self.move_buttons)
self.grid.addWidget(btn, i, 4)
def move_buttons(self):
row = self.grid.getItemPosition(self.grid.indexOf(self.sender()))[0]
for col in range(4):
btn = self.grid.itemAtPosition(row, col).widget()
self.grid.removeWidget(btn)
self.grid.addWidget(btn, row, col + 5)
self.grid.addItem(QSpacerItem(btn.width(), btn.height(), QSizePolicy.Maximum, QSizePolicy.Maximum), row, col)