Как сделать чтобы 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_()
