Colors PyQt在组合框中的一行中显示不同的颜色

Colors PyQt在组合框中的一行中显示不同的颜色,colors,pyqt,rtf,qcombobox,Colors,Pyqt,Rtf,Qcombobox,我正在使用PyQt开发一个UI,其中Qcombobox中的单个项可以有两个或三个用逗号分隔的单词。因此,对于例如,项目1可以是“Text1,Text2,Text3”,项目2可以是“Text4,Text5” 我想做的是为itemText中由“,”分隔的项目提供多个背景色。因此,对于第1项(“Text1,Text2,Text3”),我需要在Text1后面加一个颜色,在Text2后面加一个不同的颜色,在Text3后面加一个第三个颜色。同样,项目2将有2种背景色 我曾考虑使用rtf格式,但无法找到一种方

我正在使用PyQt开发一个UI,其中Qcombobox中的单个项可以有两个或三个用逗号分隔的单词。因此,对于例如,项目1可以是“Text1,Text2,Text3”,项目2可以是“Text4,Text5”

我想做的是为itemText中由“,”分隔的项目提供多个背景色。因此,对于第1项(“Text1,Text2,Text3”),我需要在Text1后面加一个颜色,在Text2后面加一个不同的颜色,在Text3后面加一个第三个颜色。同样,项目2将有2种背景色

我曾考虑使用rtf格式,但无法找到一种方法为一个项目行提供多种颜色


感谢您的帮助。

实现此目的的一种方法是使用渲染组合框项目的富文本(通过自定义),以及将组合框当前文本的富文本转换回纯文本(通过its)

这将允许您对项目文本使用html,如下所示:

self.combo=RichTextCombo(self)
self.combo.addItem(“”)
蓝色
红色
""")
下面是combobox类:

class RichTextCombo(QtGui.QComboBox):
定义初始化(self,*args,**kwargs):
超级(RichTextCombo,self)。\uuuuuuuuuuuuuuu初始值(*args,**kwargs)
self.\u document=QtGui.QTextDocument(self)
self.\u delegate=RichTextDelegate(self)
self.setItemDelegate(self.\u delegate)
self.setSizedJustPolicy(
QtGui.QComboBox.AdjustToMinimumContentsLength)
def paintEvent(自身,事件):
painter=QtGui.QStylePainter(self)
painter.setPen(self.palete().color(QtGui.qpalete.Text))
options=QtGui.QStyleOptionComboBox()
self.initStyleOption(选项)
self.\u document.setHtml(options.currentText)
options.currentText=self.\u document.toPlainText()
painter.drawComplexControl(QtGui.QStyle.CC_组合框,选项)
painter.drawControl(QtGui.QStyle.CE_ComboBoxLabel,选项)
下面是自定义项委托:

类RichTextDelegate(QtGui.QStyledItemDelegate):
定义初始化(self,*args,**kwargs):
超级(RichTextDelegate,self)。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
self.\u document=QtGui.QTextDocument(self)
def油漆(自身、油漆工、选项、索引):
options=QtGui.QStyleOptionViewItemV4(选项)
self.initStyleOption(选项,索引)
如果options.widget不是None:
style=options.widget.style()
其他:
style=QtGui.QApplication.style()
self.\u document.setHtml(options.text)
options.text=“”
style.drawControl(QtGui.QStyle.CE_ItemViewItem、选项、画师)
context=QtGui.QAbstractTextDocumentLayout.PaintContext()
如果选择了options.state和QtGui.QStyle.state\u:
context.palete.setColor(
QtGui.qpalete.Text,options.palete.color(
QtGui.qpalete.Active,QtGui.qpalete.HighlightedText)
textRect=style.subElementRect(
QtGui.QStyle.SE_ItemViewItemText,选项)
保存
painter.translate(textRect.topLeft())
painter.setClipRect(textRect.translated(-textRect.topLeft()))
self.\u document.documentLayout().draw(画师、上下文)
恢复
def sizeHint(自身、选项、索引):
options=QtGui.QStyleOptionViewItemV4(选项)
self.initStyleOption(选项,索引)
self.\u document.setHtml(options.text)
self.\u document.setTextWidth(options.rect.width())
返回QtCore.QSize(self.\u document.idealWidth(),
self.\u document.size().height())

要更改同一文本中单词的背景色,我认为应该使用html标记。但是由于组合框不会解释标记,因此必须创建一个委托来显示文本。该代表将负责解释html标记。