是否可以通过委托更改 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>
我正在使用 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>