如何在QListWidgetItem和QCombobox项目中设置样式(富文本)? (PyQt的/ PySide)

时间:2014-03-07 10:45:05

标签: python pyqt pyside

我发现了类似的问题,但没有答案或答案是替代解决方案。

我需要在QComboBoxes和QListWidgets(在PySide中)创建面包屑跟踪,我正在考虑将这些项目的文本设为粗体。但是,我很难找到有关如何实现这一目标的信息。

这就是我所拥有的:

# QComboBox
for server in servers:
    if optionValue == 'top secret':
        optionValue = server
    else:
        optionValue = '<b>' + server + '</b>'
    self.comboBox_servers.addItem( optionValue, 'data to store for this QCombobox item' )


# QListWidgetItem
for folder in folders:
    item = QtGui.QListWidgetItem()
    if folder == 'top secret':
        item.setText( '<b>' + folder + '</b>' )
    else:
        item.setText( folder )
    iconSequenceFilepath = os.path.join( os.path.dirname(__file__), 'folder.png' )
    item.setIcon( QtGui.QIcon(r'' + iconSequenceFilepath + ''))
    item.setData( QtCore.Qt.UserRole, 'data to store for this QListWidgetItem' )
    self.listWidget_folders.addItem( item )

1 个答案:

答案 0 :(得分:3)

您可以使用html / css-like样式,即将文本包装在标签内:

item.setData( QtCore.Qt.UserRole, "<b>{0}</b>".format('data to store for this QListWidgetItem'))

另一个选择是设置font-role:

item.setData(0, QFont("myFontFamily",italic=True), Qt.FontRole)

也许你必须在你的情况下使用QFont.setBold()。但是,使用html-formating可能会更灵活。

对于组合框,使用setItemData():

# use addItem or insertItem (both works)
# the number ("0" in this case referss to the item index)
combo.insertItem(0,"yourtext"))
#set at tooltip
combo.setItemData(0,"a tooltip",Qt.ToolTipRole)
# set the Font Color
combo.setItemData(0,QColor("#FF333D"),Qt.BackgroundColorRole)
#set the font
combo.setItemData(0, QtGui.QFont('Verdana', bold=True), Qt.FontRole)

使用样式表格式不适用于项目文本本身,afaik。