pythonqtpyqtqtstylesheetsqlayout

Set background color of layout


As the layout object has no attribute ".setStyleSheet()", how can one set the background color for a given layout?

As a visual explanation, I can set both the label and the button background color, but not the entire layout, which includes the spacer.

enter image description here

Programatically, I'm organizing some information in horizontal layouts and displaying them in a frame. I would like to alternate background colors for each loop.

for param_name in parameters:
    hlayouts.append(QtGui.QHBoxLayout())
    labels.append(QtGui.QLabel("%s"%param_name))
    sliders.append(QtGui.QSpacerItem(10,10,hPolicy=QtGui.QSizePolicy.Expanding))
    spins.append(QtGui.QDoubleSpinBox())

    spins[index].setValue(float(values.get(param_name)))
    labels[index].setStyleSheet("background-color:black;")
    spins[index].setStyleSheet("background-color:black;")

    hlayouts[index].addWidget(labels[index])
    hlayouts[index].addItem(sliders[index])
    hlayouts[index].addWidget(spins[index])

    index += 1

vlayout = QtGui.QVBoxLayout()
for i in range(len(hlayouts)):
    vlayout.addLayout(hlayouts[i])

Solution

  • You could just add set the layout on an empty QWidget and set the StyleSheet on this widget.

    for index, param_name in enumerate(parameters):
        container = QtGui.QWidget(self)
        layout = QtGui.QHBoxLayout(container )
    
        hlayouts.append(container)
        labels.append(QtGui.QLabel("%s"%param_name))
        sliders.append(QtGui.QSpacerItem(10,10,hPolicy=QtGui.QSizePolicy.Expanding))
        spins.append(QtGui.QDoubleSpinBox())
    
        spins[index].setValue(float(values.get(param_name)))
        container.setStyleSheet("background-color:black;")
    
        layout.addWidget(labels[index])
        layout.addItem(sliders[index])
        layout.addWidget(spins[index])
    
    
    vlayout = QtGui.QVBoxLayout(self)
    for widget in hlayouts:
        vlayout.addWidget(widget)