在模型/视图配置中使用时,如何更改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()
故障由以下线路引起:
因为如果}是{},那么
role
是Qt.ForegroundRole
,而{QVariant()
将被返回,您想要的句子将不会被执行。在我不明白保持文本和角色的原因。我认为没有必要重写
data()
。因此,解决方案如下:
^{pr2}$另外一个无声的错误,当我测试你的代码时,已经发布了以下警告:
^{3}$出现此警告是因为您没有将父级传递给模型,因此内存没有被正确删除,解决方案如下:
相关问题 更多 >
编程相关推荐