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 的标题。

我想要的结果:

【问题讨论】:

这看起来您正在尝试做更适合QTableWidgetQTableView 的事情。如果您在 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 设置第一行样式表的主要内容,如果未能解决你的问题,请参考以下文章

PyQt:QGridLayout 中的 setSpacing

PyQt5 QGridLayout 大小不正确

【PyQt】网格布局 QGridLayout

QGridLayout栅格布局函数参数设置

PyQt5-网格布局(QGridLayout)-11

PyQt5-网格布局(QGridLayout)-10