我从数据库中获取数据并将其显示在 TableView 上。
在一个单元格中,一些关键字对用户来说应该更明显,例如警告关键等。
我知道如何更改整个单元格单词的字体颜色,但是我们只需要将其中的一些变红即可。
例如
警告:您的试用期仅剩20天
单词警告和数字 20 应为红色,其他单词应正常为黑色。
如何?非常感谢。
您需要为表格视图使用模型,该模型为角色返回某些单元格的红色前景色ForegroundRole
。就像是:
class MyModel(QtCore.QAbstractTableModel):
def data(self, index, role):
if index.isValid():
if role == QtCore.Qt.ForegroundRole and condition_for_red_color:
return QtGui.QBrush(...)
我认为您需要使用委托来实现您想要的 - 标准视图不支持那种文本格式。
代表可以按照您想要的任何方式绘制单元格。这并不像您想象的那么难,但它需要您创建一个绘制方法,以两种颜色书写文本。理想情况下,您希望它支持所有通用样式,因此使其成为 QStyledItemDelegate 的子类。这里有一些很好的例子,涵盖了你需要的一切:
不幸的是,PySide 实现中目前存在一个错误QStyledItemDelegate.initStyleOption
:
https://bugreports.qt-project.org/browse/PYSIDE-115
这可能会导致风格完全正确的一些困难。但是红色文字应该是可行的。
如果有人来这里是为了如何在表格中将负数变为红色,warvariuc 的回答几乎可以确定。这是 pyqt 代码,如果它可以帮助任何人(它应该使任何负数变为红色,其他所有内容,包括字符串或非数字,黑色):
class PandasModel(QtCore.QAbstractTableModel):
def __init__(self, data, parent=None):
QtCore.QAbstractTableModel.__init__(self, parent)
self._data = data
def data(self, index, role):
if index.isValid():
if role == QtCore.Qt.ForegroundRole:
try:
if np.float(index.data()) < 0:
return QtGui.QBrush(QtCore.Qt.red)
else:
return QtGui.QBrush(QtCore.Qt.black)
except:
return QtGui.QBrush(QtCore.Qt.black)