PyQt - QGridLayout 设置第一行样式表
Posted
技术标签:
【中文标题】PyQt - QGridLayout 设置第一行样式表【英文标题】:PyQt - QGridLayout set first Row stylesheet 【发布时间】:2015-09-08 15:40:03 【问题描述】:我正在生成一个 Gridlayout 并添加小部件,如下所示:
elements = QGroupBox()
self.grid = QGridLayout(elements)
#Arrange Row Elements
self.grid.addWidget(subjectName, 0, 0)
self.grid.addWidget(statusName, 0, 1)
我想为第一行(而不是行内的小部件)设置一个 background-color,以指示 Grid 的标题。
我想要的结果:
【问题讨论】:
这看起来您正在尝试做更适合QTableWidget
或QTableView
的事情。如果您在 QGridLayout 中设置小部件的背景,这取决于小部件......您可以为每个小部件使用 setStyleSheet
。
qtcentre.org/threads/…
是否可以在 QTableView 中添加小部件?
是的。但它确实需要在大多数情况下使用Model/View Programming 方法。
【参考方案1】:
您可以在设置样式表时使用 QObjects 属性来区分单元格。
可以使用例如
setProperty( "coloredcell", true )
结合添加到QGridLayout的widget上
parentWidget.setStyleSheet("*[coloredcell=\"true\"] background-color:rgb(" + QString::number((rand() % 255)) + "," + QString::number((rand() % 255)) + "," + QString::number((rand() % 255)) + ");");
其中 parentWidget 是包含 QGridLayout 的 Widget。
要使背景颜色在单个单元格的完整范围内,您必须向 QGridLayout 添加一个中间 QWidget,设置属性,向中间 QWidget 添加一个中间布局,然后在其中添加您想要的小部件在表中看到。
如果没有中间小部件,如果将“coloredcell”属性设置为实际小部件本身(在我的示例中为 QPushButton),则只会更改此小部件的背景颜色,而不是整个 QGridLayout 单元格的颜色。这就是我们需要它的原因。
示例代码(未经测试):
widget = QWidget()
gridLayout = QGridLayout(widget)
for i in range(0,3):
for j in range(0,3):
intermediateWidget = QWidget(widget)
intermediateWidget.setProperty("coloredcell", true)
intermediateLayout = QGridLayout( intermediateWidget )
button = QPushButton( QString( "Row %1 Col %2" ).arg(i).arg(j) )
gridLayout.addWidget(intermediateWidget, i, j)
widget.setStyleSheet("*[coloredcell=\"true\"] background-color:rgb(255,0,0);")
widget.show()
【讨论】:
这在 pyqt 中是如何覆盖的? 这就是它在c++中的工作方式,我自己测试过。我将它“翻译”为 python,因为我目前使用的机器上没有安装 pyqt。究竟是什么问题? 这将为小部件而不是单元格设置背景,对吗? 可以,但是小部件可以填满整个单元格。 是的,但并非所有小部件都完全扩展到单元格中,所以我创建了一个 QFrame 对象并将 QLabel 添加到该对象中。以上是关于PyQt - QGridLayout 设置第一行样式表的主要内容,如果未能解决你的问题,请参考以下文章