我从数据库中获取数据并在TableView上显示它。
在一个单元格中,某些关键字对于用户来说应该更加明显,例如警告关键等等。
我知道如何更改整个单元格的字体颜色,但我们只需要更改其中的一些字体颜色。
e.g。
警告:您的试用期只剩下 20 天
警告的字样和数字20应该是红色,其他字应该是正常的黑色。
怎么样? 非常感谢你。
答案 0 :(得分:3)
您需要为表格视图使用model,这会为角色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(...)
答案 1 :(得分:0)
我认为你需要使用委托来实现你想要的 - 标准视图不支持那种文本格式化。
委托可以按照您想要的方式绘制单元格。它并不像你想象的那么难,但它需要你创建一个以两种颜色写入文本的绘制方法。理想情况下,您希望它支持所有常规样式,因此将其作为QStyledItemDelegate的子类。以下是一些很好的例子,涵盖了你需要的一切:
How to make item view render rich (html) text in Qt
遗憾的是,QStyledItemDelegate.initStyleOption
的PySide实施中存在一个错误:
https://bugreports.qt-project.org/browse/PYSIDE-115
这可能会使风格完全正确。但是红色文本应该是可行的。
答案 2 :(得分:0)
万一有人来这里如何将负数变成红色,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)