PyQt 如何在 QListWidget 中为文本的一部分添加颜色?

6

我想在QListWidget中的部分文本上添加颜色。

enter image description here

我尝试在文本中加入font标签,但无效。

1个回答

10
你是想把单个QListWidgetItem的一部分文字或整个文字都染上颜色吗?
如果你想要染色整个单独的QListWidgetItem,可以使用item.setTextColor()。以下是一个例子,将第二个项目的文本染成红色:
from PyQt4 import QtGui, QtCore
import sys

class Main(QtGui.QMainWindow):
    def __init__(self, parent = None):
        QtGui.QMainWindow.__init__(self,parent)
        self.initUI()

    def initUI(self):
        mylist = QtGui.QListWidget(self)
        mylist.setMinimumSize(QtCore.QSize(800, 800))
        for i in range(5):
            item = mylist.addItem('Item %s' % (i + 1)) 
        items = mylist.findItems("Item 2",QtCore.Qt.MatchExactly)
        if len(items) > 0:
            for item in items:
                item.setTextColor (QtGui.QColor("red"))

def main():
    app = QtGui.QApplication(sys.argv)
    main = Main()
    main.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

这将得到以下结果:

在此输入图像描述

或者,如果只是QListWidgetItem的一部分文本,则可以使用addWidget()和HTML将其添加到QLabel中:

from PyQt4 import QtGui, QtCore
import sys

class Main(QtGui.QMainWindow):
    def __init__(self, parent = None):
        QtGui.QMainWindow.__init__(self,parent)
        self.initUI()

    def initUI(self):
        mylist = QtGui.QListWidget(self)
        mylist.setMinimumSize(QtCore.QSize(800, 800))
        for i in range(5):
            widgitItem = QtGui.QListWidgetItem() 
            widget = QtGui.QWidget()
            widgetText =  QtGui.QLabel('test<span style="color:#ff0000;">test %s</span>' % (i + 1))
            widgetLayout = QtGui.QHBoxLayout()
            widgetLayout.addWidget(widgetText)
            widgetLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
            widget.setLayout(widgetLayout)      
            mylist.addItem(widgitItem)
            widgitItem.setSizeHint(widget.sizeHint()) 
            mylist.setItemWidget(widgitItem, widget)


def main():
    app = QtGui.QApplication(sys.argv)
    main = Main()
    main.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

这就是它的效果

效果


如果我想要从右向左改变方向,应该怎么做? - CodingX
将文本的方向反转,使其读作我的示例中的“1 tsettset”? - Dan-Dev
你尝试过在http://stackoverflow.com/questions/26378900/set-text-direction-for-qlabel的评论中提供的答案或建议吗? - Dan-Dev
不要给小部件贴标签,查看此处的图像http://hpics.li/b08bef4,我想从右到左。 - CodingX
我认为这个问题值得一个单独的提问。你能否提出一个新问题,非常清楚地说明你目前拥有什么以及你想要什么。我稍后会尝试查看。同时,如果这个答案解决了你最初提出的问题,请随意接受它和/或使用左侧的按钮投票支持它。 - Dan-Dev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接