【问题标题】:In Pyqt/PySide How to set different color in on cell of the TableView在 Pyqt/PySide 如何在 TableView 的单元格中设置不同的颜色
【发布时间】:2013-04-29 22:55:49
【问题描述】:

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

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

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

例如

警告:您的试用期仅剩 20

警告和数字 20 字样应为红色,其他字样应为黑色。

怎么做? 非常感谢。

【问题讨论】:

    标签: python qt pyqt pyside


    【解决方案1】:

    您需要为表格视图使用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(...)
    

    【讨论】:

      【解决方案2】:

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

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

      How to make item view render rich (html) text in Qt

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

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

      这可能会导致样式完全正确时遇到一些困难。但是红色的文字应该是可行的。

      【讨论】:

        【解决方案3】:

        如果有人来这里是为了如何将表格中的负数变为红色,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)
        

        【讨论】:

          猜你喜欢
          • 2013-03-15
          • 2011-10-23
          • 2017-10-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-04-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多