QTableView 中的着色行而不是单元格

Coloring Row in QTableView instead of Cell

背景故事: 使用导入的 UI,我将 table 放到 QTableView 上。我还利用交替的行颜色来更好地区分行。

问题: 我正在为 [=38] 的 上色=] 其中一列包含 True 值。我可以为 单元格 着色,但还没有找到为整行着色的方法。我使用 PandasModel class 来格式化 tables:

class PandasModel(QtCore.QAbstractTableModel):
def __init__(self, data, parent=None):
    QtCore.QAbstractTableModel.__init__(self, parent)
    self._data = data

def rowCount(self, parent=None):
    return len(self._data.values)

def columnCount(self, parent=None):
    return self._data.columns.size

def data(self, index, role=QtCore.Qt.DisplayRole):
    if index.isValid():
        if role == QtCore.Qt.DisplayRole:
            return str(self._data.values[index.row()][index.column()])
        if role == QtCore.Qt.BackgroundRole:
            row = index.row()
            col = index.column()
            if self._data.iloc[row,col] == True:
                return QtGui.QColor('yellow')
    return None

def headerData(self, col, orientation, role):
    if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole:
        return self._data.columns[col]
    return None

我查看了无数示例,我知道可能有多种使用 QBrush 或 QColor 为 table 着色的方法,但到目前为止我能做的最好的就是简单地为单元格着色包含 True 值。从其他示例中拼接代码,我认为 col = index.column() 可能会妨碍,因为它可能将其限制在单元格中,但是,当我删除它时它变得模棱两可。

重要提示:我想保留我在脚本其他地方设置的交替行颜色,所以请记住这一点!我只想为包含任何 True 值的特定行着色。

如果布尔值的列是已知的,您只需在索引的给定行检查该列的值。
假设列索引为2:

class PandasModel(QtCore.QAbstractTableModel):
    def __init__(self, data, parent=None):
        QtCore.QAbstractTableModel.__init__(self, parent)
        self._data = data
        self.boolColumn = 2

    # ...
    def data(self, index, role=QtCore.Qt.DisplayRole):
        if index.isValid():
            if role == QtCore.Qt.DisplayRole:
                return str(self._data.values[index.row()][index.column()])
            if role == QtCore.Qt.BackgroundRole:
                row = index.row()
                if self._data.iloc[row, self.boolColumn] == True:
                    return QtGui.QColor('yellow')

注意:return None隐含在功能块的末尾,不需要指定。