1

我从数据库中获取数据并将其显示在 TableView 上。

在一个单元格中,一些关键字对用户来说应该更明显,例如警告关键等。

我知道如何更改整个单元格单词的字体颜色,但是我们只需要将其中的一些变红即可。

例如

警告:您的试用期仅剩20

单词警告和数字 20 应为红色,其他单词应正常为黑色。

如何?非常感谢。

4

3 回答 3

3

您需要为表格视图使用模型,该模型为角色返回某些单元格的红色前景色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(...)
于 2013-05-06T08:22:28.837 回答
0

我认为您需要使用委托来实现您想要的 - 标准视图不支持那种文本格式。

代表可以按照您想要的任何方式绘制单元格。这并不像您想象的那么难,但它需要您创建一个绘制方法,以两种颜色书写文本。理想情况下,您希望它支持所有通用样式,因此使其成为 QStyledItemDelegate 的子类。这里有一些很好的例子,涵盖了你需要的一切:

如何使项目视图在 Qt 中呈现富 (html) 文本

不幸的是,PySide 实现中目前存在一个错误QStyledItemDelegate.initStyleOption

https://bugreports.qt-project.org/browse/PYSIDE-115

这可能会导致风格完全正确的一些困难。但是红色文字应该是可行的。

于 2013-05-16T22:16:58.220 回答
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)
于 2018-09-13T16:26:44.227 回答