Цвет ячейки QTableView на основе значения в отдельной ячейке - PullRequest
0 голосов
/ 07 мая 2020

Я хочу отформатировать ячейку на основе значения в другой ячейке. Я использую QTableView, заполненный QAbstractModel, вместо Pandas Dataframe.

В основном, как показано ниже, если значение в ячейке в столбце 1 - «МЫ», я хотел бы отформатировать BackgroundRole в соответствующей ячейке в столбце 5.

Я очень признателен за любую помощь!

class StateModel(QtCore.QAbstractTableModel):
    def __init__(self, imported_dataframe=pd.DataFrame()):
        QtCore.QAbstractTableModel.__init__(self)
        self._dataframe = imported_dataframe

    def setDataFrame(self, imported_dataframe):
        self.beginResetModel()
        self._dataframe = imported_dataframe
        self.endResetModel()

    def rowCount(self, parent=None):
        return self._dataframe.shape[0]

    def columnCount(self, parent=None):
        return self._dataframe.shape[1]

    def data(self, index, role=QtCore.Qt.DisplayRole):
        current_column = index.column()
        current_row = index.row()

        if index.isValid():
            if role == QtCore.Qt.ForegroundRole:

                if current_column == 1:
                    it = self._dataframe.iloc[index.row(), current_column]
                    if it == 'WE':
                        return QtGui.QBrush(QtCore.Qt.white)

            if role == QtCore.Qt.BackgroundColorRole:
                if current_column == 1:
                    it = self._dataframe.iloc[index.row(), current_column]
                    if it == 'WE':
                        return QtGui.QBrush(QtCore.Qt.blue)

            if role == QtCore.Qt.FontRole:
                table_font = QtGui.QFont('open sans', 12)
                return table_font

            if role == QtCore.Qt.DisplayRole:
                return str(self._dataframe.iloc[index.row(), index.column()])

    def headerData(self, col, orientation, role):
        header_font = QtGui.QFont('open sans', 14, QtGui.QFont.Bold)
        black_color = QtGui.QColor(QtCore.Qt.blue)
        if orientation == QtCore.Qt.Horizontal:
            if role == QtCore.Qt.DisplayRole:
                return str(self._dataframe.columns[col])
            if role == QtCore.Qt.FontRole:
                return header_font

1 Ответ

0 голосов
/ 07 мая 2020

Ответ - именно то, что предложил @Heike.

    if role == QtCore.Qt.BackgroundColorRole:
        if current_column == 5:
            it = self._dataframe.iloc[index.row(), 1]
            if it == 'RTP':
                return QtGui.QBrush(QtGui.QColor('#d3b2ff'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...