PyQt: Comment personnaliser la zone de liste déroulante d'Éléments d'affichage

Est-il possible de créer une zone de liste déroulante élément en premier, puis définissez ses propriétés d'affichage (comme élément de la couleur d'arrière-plan, icône, couleur de police, taille de police et etc, et seulement alors, pour l'ajouter à la zone de liste déroulante à l'aide de Comobobox .méthode addItem ()? Comme il est maintenant, je suis coincé à l'aide de:

myCombobox = QtGui.QComboBox
for i in range(10):
    myCombobox.addItem(str(i))

Inutile de dire que cette approche laisse peu de place à la personnalisation de l'individu zone de liste déroulante des objets de propriétés d'affichage. Ce que je voudrais, c'est quelque chose comme ceci:

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))

Édité plus tard

Voici un exemple de travail de QCombobox personnalisé des éléments. Grâce Ekhumoro!


from PyQt4 import QtGui, QtCore

def main():
    app = QtGui.QApplication(sys.argv)
    window = QtGui.QWidget()
    main_layout = QtGui.QVBoxLayout()
    # QComboBox
    combo = QtGui.QComboBox()
    model = combo.model()
    for row in range(10):
        item = QtGui.QStandardItem(str(row))
        item.setForeground(QtGui.QColor('red'))
        font = item.font()
        font.setPointSize(10)
        item.setFont(font)
        model.appendRow(item)
    main_layout.addWidget(combo) 

    ok_button = QtGui.QPushButton("OK")
    ok_button.clicked.connect(OK)      
    main_layout.addWidget(ok_button) 

    main_layout.addStretch(1)
    window.setLayout(main_layout)
    window.show()
    sys.exit(app.exec_())

def OK(self):
    print 'OK'

if __name__ == '__main__':
    main()

OriginalL'auteur alphanumeric | 2014-04-05