如何在QListWidgetItem和QCombobox项中设置(富文本)样式?(PyQt/PySide)
我发现有类似的问题被提出来过,但要么没有答案,要么答案是其他的解决办法。
我需要在QComboBox和QListWidget(在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 个回答
7
你可以使用类似于html和css的样式,也就是把你的文本放在标签里面:
item.setData( QtCore.Qt.UserRole, "<b>{0}</b>".format('data to store for this QListWidgetItem'))
另外一个选择是设置字体的角色:
item.setData(0, QFont("myFontFamily",italic=True), Qt.FontRole)
在你的情况下,可能需要使用QFont.setBold()来加粗。不过,使用html格式可能会更灵活一些。
如果是下拉框的话,可以使用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)
据我所知,使用样式表格式化不会对项目文本本身起作用。