首页 > 解决方案 > 是否可以通过委托更改 PyQt5 TableView 中的颜色?

问题描述

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

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。

标签: pythonpyqt5qtableview

解决方案


您必须更改 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:
            option.palette.setBrush(
                QtGui.QPalette.Text, QtGui.QBrush(QtGui.QColor("red"))
            )
            option.backgroundBrush = QtGui.QBrush(QtGui.QColor("green"))

推荐阅读