【问题标题】:PyQt - QGridLayout set first Row stylesheetPyQt - QGridLayout 设置第一行样式表
【发布时间】: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
  • 是否可以在 QTableView 中添加小部件?
  • 是的。但它确实需要在大多数情况下使用Model/View Programming 方法。

标签: qt pyqt qtstylesheets


【解决方案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 添加到该对象中。
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 1970-01-01
  • 2012-06-15
  • 2019-07-31
  • 2013-10-09
  • 1970-01-01
相关资源
最近更新 更多