Как сделать чтобы setAlignment не ломал стиль QtWidget в PyQt5?

При написании кода наткнулся на Интересную особенность PyQt5 , как только я использую метод setAlignment для моих виджетов перестает работать setstylesheet, я не представляю как это исправить

def __init__(self):
    QtWidgets.QMainWindow.__init__(self)
    topbox = QtWidgets.QHBoxLayout()
    topbox.setAlignment(QtCore.Qt.AlignTop)
    _button = QtWidgets.QPushButton("Button", self)
    topbox.addWidget(_button)
    box1 = QtWidgets.QWidget(self)
    box2 = QtWidgets.QWidget(self)
    box1.setObjectName("boxes")
    box2.setObjectName("boxes")
    box1.setStyleSheet("background-color: red;")
    box2.setStyleSheet("background-color: black")
    gridbox = QtWidgets.QGridLayout()
    gridbox.addWidget(box1, 0, 0)
    gridbox.addWidget(box2, 0, 1)
    widget =  QtWidgets.QWidget(self)
    gridbox.setHorizontalSpacing(100)
    gridbox.setAlignment(QtCore.Qt.AlignTop) ## если убрать, то все заработает
    mainbox = QtWidgets.QVBoxLayout(widget)
    mainbox.addLayout(topbox)
    mainbox.addLayout(gridbox)
    self.setCentralWidget(widget)
    self.setStyleSheet(open("style.qss", "r").read())

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

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

вам нужно установить box1.setMinimumSize(80, 80). Попробуйте так:

import sys
from PyQt5.Qt import *
from PyQt5 import QtWidgets, QtGui, QtCore


class Demo(QMainWindow):    
    def __init__(self):        
        super().__init__()

        self.centralWidget =  QtWidgets.QWidget()   
        self.setCentralWidget(self.centralWidget)

        _button = QtWidgets.QPushButton("Button", self)
        topbox = QtWidgets.QHBoxLayout()
        topbox.setAlignment(QtCore.Qt.AlignTop)
        topbox.addWidget(_button)

        box1 = QtWidgets.QWidget()
        box1.setObjectName("boxes")
        box1.setMinimumSize(80, 80)                                  # +++
        box1.setStyleSheet("background-color: red;")

        box2 = QtWidgets.QWidget()
        box1.setMinimumSize(80, 80)                                  # +++
        box2.setObjectName("boxes")
        box2.setStyleSheet("background-color: blue")

        bottomWidget = QtWidgets.QWidget()        
        gridbox = QtWidgets.QGridLayout(bottomWidget)
        gridbox.addWidget(box1, 0, 0)
        gridbox.addWidget(box2, 0, 1)
        gridbox.setHorizontalSpacing(100)

# попробуйте так:      
#        gridbox.setAlignment(QtCore.Qt.AlignTop)            ## если убрать, то все заработает
# !!! или так:        
        gridbox.setRowStretch(1, 1)

        mainbox = QtWidgets.QVBoxLayout(self.centralWidget)
        mainbox.addLayout(topbox)
        mainbox.addWidget(bottomWidget)

        self.setStyleSheet(
            open("D:/_Qt/Python-Examples/_PyQt5/Style/BreezeStyleSheets/dark.qss", "r").read()) # style.qss

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w  = Demo()
    w.resize(300, 200)
    w.show()
    app.exec_()    

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

→ Ссылка