Можно ли изменить цвет в PyQt5 TableView с помощью делегата?

#python #pyqt5 #qtableview

#python #pyqt5 #qtableview

Вопрос:

Я использую PyQt5 QTableView для отображения таблицы 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.

Ответ №1:

Вам нужно изменить палитру QStyleOptionViewItem, чтобы изменить цвет текста, и backgroundBrush QStyleOptionViewItem, чтобы изменить цвет фона.

 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"))