Как отцентровать виджеты разных размеров

Хочу добавить два виджета разной ширины в третий и отцентрировать их по вертикали.
При условии использования метода setFixedSize на одном из них, однако при достаточно большом тексте во втором виджете, первый съезжает влево.

import sys
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QLabel
from PyQt5.QtCore import Qt


class Window(QWidget):
    def __init__(self, app, parent=None):
        super().__init__(parent)
        self.layout = QVBoxLayout(self)
        self.layout.setAlignment(Qt.AlignCenter)
        self.setFixedSize(100, 100)

        a = QLabel(self)
        a.setStyleSheet("QLabel {background-color: rgb(100, 100, 100)}")
        a.setFixedSize(50, 20)

        b = QLabel(self)
        b.setStyleSheet("QLabel {background-color: rgb(200, 100, 100)}")
        b.setText('texttexttext')

        self.layout.addWidget(a)
        self.layout.addWidget(b)



def application():
    app = QApplication(sys.argv)
    window = Window(app=app)
    window.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    application()

Код


Ответы (1 шт):

Автор решения: S. Nick

void QBoxLayout::addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())

Добавляет виджет в конец этого макета блока с коэффициентом растяжения и выравниванием alignment.

import sys
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QLabel
from PyQt5.QtCore import Qt


class Window(QWidget):
    def __init__(self):
        super().__init__()
        
        self.layout = QVBoxLayout(self)
        self.layout.setAlignment(Qt.AlignCenter)
        self.setFixedSize(100, 100)                   # ???

        self.label_a = QLabel(self)
        self.label_a.setStyleSheet("QLabel {background-color: rgb(100, 100, 100);}")
        self.label_a.setFixedSize(50, 20)

        self.label_b = QLabel(self)
        self.label_b.setStyleSheet("""
            QLabel {
                background-color: rgb(200, 100, 100);
                color: #fff;
            }
        """)
        self.label_b.setText('1234567890 12345')

        self.layout.addWidget(self.label_a, alignment=Qt.AlignCenter)
        self.layout.addWidget(self.label_b)


def application():
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    application()

введите сюда описание изображения

→ Ссылка