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
Vous devez vous connecter pour publier un commentaire.
Par défaut,
QComboBox
utilise un QStandardItemModel, de sorte que le QStandardItem méthodes peuvent être utilisées pour modifier les différentes propriétés d'affichage:PS:
Si vous souhaitez réinitialiser l'un des propriétés de l'élément de, il
None
, comme ceci:Comment réinitialiser un élément de couleur de premier plan par défaut "aucune couleur"? ...après le point a déjà d'éléments de jeu.setForeground(QtGui.QColor('rouge')) il est nécessaire de basculer l'affichage de la couleur par défaut et vice versa...
Voir ma réponse mis à jour. Aussi: je viens de réaliser que
QComboBox
utilise déjà unQStandardItemModel
, donc j'ai simplifié mon exemple en conséquence.Merci! J'ai trouvé que pour réinitialiser un élément de couleur, je peux juste régler (QtGui.QColor ("noir")). Les produits seulement afficher leurs couleurs lorsque vous cliquez sur zone de liste déroulante pour afficher tous les éléments de la liste. Mais lorsque la zone de liste déroulante est fermé, l'élément ne montre pas de couleur (juste la couleur normale). Est-il possible de "forcer" l'élément de montrer sa couleur même quand ComoboBox est "plié"?
La réinitialisation de l'avant-plan à "noir" est un bug, parce que pas toutes les couleurs auront que la couleur par défaut (une couleur foncée-régime aurait un contraste lumière couleur par défaut). Comme pour l'autre question: je pense que cela va au-delà de la portée de la question, de sorte s'il vous plaît commencer un nouveau.
OriginalL'auteur ekhumoro