是否更改模型/视图中QStandardItem的文本颜色?

2024-03-28 08:43:46 发布

您现在位置:Python中文网/ 问答频道 /正文

在模型/视图配置中使用时,如何更改QStandardItem的文本颜色。它似乎永远都是黑色的测试。在

下面是一个可执行的示例代码,它将“Hello World”显示为黑色文本。我想把它改成绿色的。在

我也尝试过使用_component.setForeground(QColor(0,255,0))。在

import sys
import string
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class ComponentItem(QStandardItem):
    """docstring for ComponentItem"""
    def __init__(self, text, role=Qt.DisplayRole):
        super(ComponentItem, self).__init__()
        self.component = text
        self.role = role

    def data(self, role=Qt.DisplayRole):
        if role != self.role:
            return QVariant()
        if role == Qt.DisplayRole:
            return QVariant(self.component)
        if role == Qt.ForegroundRole:
            return QColor(0,255,0)
        return QVariant()

class ComponentModel(QStandardItemModel):
    """docstring for ComponentModel"""
    def __init__(self, parent=None):
        super(ComponentModel, self).__init__()
        self.parent = parent

        _component = ComponentItem("Hello World")  #How do I change Text Color?
        _component.setData(QColor(255,0,0), Qt.ForegroundRole) #Does not work

        self.appendRow([_component])

class ComponentTree(QTreeView):
    """docstring for ComponentTree"""
    def __init__(self, parent=None):
        super(ComponentTree, self).__init__()
        self.parent = parent

        self.setModel(ComponentModel(self))

class Example(QWidget):
    def __init__(self):
        super(Example, self).__init__()

        _tree = ComponentTree()

        vBox = QVBoxLayout()
        vBox.addWidget(_tree)

        self.setLayout(vBox)
        self.show()

def main():

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

Tags: importselfreturnifinitdefqtclass
1条回答
网友
1楼 · 发布于 2024-03-28 08:43:46

故障由以下线路引起:

if role != self.role:
    return QVariant()
...

因为如果roleQt.ForegroundRole,而{}是{},那么QVariant()将被返回,您想要的句子将不会被执行。在

我不明白保持文本和角色的原因。我认为没有必要重写data()

因此,解决方案如下:

^{pr2}$

enter image description here


另外一个无声的错误,当我测试你的代码时,已经发布了以下警告:

^{3}$

出现此警告是因为您没有将父级传递给模型,因此内存没有被正确删除,解决方案如下:

class ComponentModel(QStandardItemModel):
    def __init__(self, parent=None):
        super(ComponentModel, self).__init__(parent)

        _component = ComponentItem("Hello World")  #How do I change Text Color?
        _component.setData(QColor(255,0,0), Qt.ForegroundRole) #Does not work
        self.appendRow([_component])

相关问题 更多 >