是否可以通过委托更改 PyQt5 TableView 中的颜色?

Is it possible to change the color in PyQt5 TableView via delegate?

我正在使用 PyQt5 QTableView 在我的 GUI 中显示 SQL table。为了对齐最后一列中的值,我使用了这个:

delegate = AlignDelegate(self.view)
self.view.setItemDelegateForColumn(3, delegate)

class AlignDelegate(QtWidgets.QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super(AlignDelegate, self).initStyleOption(option, index)
        option.displayAlignment = (QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter)

现在我想知道是否可以在 AlignDelegate 中添加一些内容以更改显示数字的颜色(将负数涂成红色)。我没有找到可行的解决方案,所以如果有人能给我提示就太好了。

我正在使用 Python 3.8、PyQt5 5.15.0、PyCharm 2020.2 和 Linux Mint 19.3。

您必须更改 QStyleOptionViewItem 的调色板以更改文本颜色和 QStyleOptionViewItem 的 backgroundBrush 以更改背景颜色。

class AlignDelegate(QtWidgets.QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super(AlignDelegate, self).initStyleOption(option, index)
        option.displayAlignment = QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter
        value = index.data()
        if value < 0:
            <b>option.palette.setBrush(
                QtGui.QPalette.Text, QtGui.QBrush(QtGui.QColor("red"))
            )
            option.backgroundBrush = QtGui.QBrush(QtGui.QColor("green"))</b>