Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt:如何自定义QComboBox项目外观_Python_Qt_Pyqt_Qcombobox - Fatal编程技术网

Python PyQt:如何自定义QComboBox项目外观

Python PyQt:如何自定义QComboBox项目外观,python,qt,pyqt,qcombobox,Python,Qt,Pyqt,Qcombobox,是否可以先创建组合框项目,然后设置其显示属性(如背景色、图标、字体颜色、字体大小等),然后使用QComobox.addItem()方法将其添加到组合框中?现在,我一直在使用: myCombobox = QtGui.QComboBox for i in range(10): myCombobox.addItem(str(i)) 不用说,这种方法为定制单个组合框项的显示属性留下了很少的空间。我想要的是这样的: myCombobox = QtGui.QComboBox for i in ra

是否可以先创建组合框项目,然后设置其显示属性(如背景色、图标、字体颜色、字体大小等),然后使用
QComobox.addItem()
方法将其添加到组合框中?现在,我一直在使用:

myCombobox = QtGui.QComboBox
for i in range(10):
    myCombobox.addItem(str(i))
不用说,这种方法为定制单个组合框项的显示属性留下了很少的空间。我想要的是这样的:

myCombobox = QtGui.QComboBox
for i in range(10):
    item = comboboxItem()
    item.setColor(allBlueAndShiny)
    font = QtGui.QFont()
    font.setPointSize(10)
    item.setFont(font)

    # Only after item was set with all display properties it is added:        
    myCombobox.addItem(str(i))
    item = self.combo.model().item(row)
    item.setData(None, Qt.ForegroundRole)
后来编辑

下面是QCombobox的定制项目的工作示例。谢谢你



默认情况下,
QComboBox
使用,因此这些方法可用于更改各种显示属性:

combo = QComboBox()
model = combo.model()
for row in range(10):
    item = QStandardItem(str(row))
    item.setForeground(QColor('red'))
    font = item.font()
    font.setPointSize(10)
    item.setFont(font)
    model.appendRow(item)
PS

如果要重置其中一个,请将其设置为
None
,如下所示:

myCombobox = QtGui.QComboBox
for i in range(10):
    item = comboboxItem()
    item.setColor(allBlueAndShiny)
    font = QtGui.QFont()
    font.setPointSize(10)
    item.setFont(font)

    # Only after item was set with all display properties it is added:        
    myCombobox.addItem(str(i))
    item = self.combo.model().item(row)
    item.setData(None, Qt.ForegroundRole)

如何将项目的前景色重置为默认的“无颜色”。。。在项目已设置为item.setForeground(QtGui.QColor('red'))之后,需要将其显示从颜色切换为默认颜色,反之亦然…@Sputnix。请参阅我的最新答案。另外:我刚刚意识到
QComboBox
已经使用了
QStandardItemModel
,因此我相应地简化了我的示例。谢谢!我发现,要重置项目的颜色,我可以将其设置为(QtGui.QColor('black'))。当您单击组合框以显示所有项目列表时,项目仅显示其颜色。但是当组合框关闭时,该项不显示颜色(仅显示常规颜色)。是否有任何方法可以“强制”物品在Comobox“折叠”时显示其颜色?@Sputnix。将前景重置为“黑色”是一个错误,因为并非所有配色方案都将该颜色作为默认颜色(深色方案的默认颜色为对比色)。至于另一个问题:我认为这超出了当前问题的范围,所以请开始一个新问题。@TodStoychev。谢谢-这只是从OPs原始代码示例(现已更正)复制的一个小错误。请建议对此类问题进行编辑,因为并非所有人都阅读所有评论。