问题
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.
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])
回答1:
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)
来源:https://stackoverflow.com/questions/27500612/set-background-color-of-layout