2010-04-20 20 views
5

Je souhaite utiliser un QComboBox avec les "clés" et les "valeurs" d'un tuple similaire à ceux utilisés dans les modèles django. Par exemple, j'ai la structure suivante pour le sexe d'une personne.Clé/Valeur pyqt QComboBox

SEX_CHOICES = (('M', 'Male'), ('F', 'Female')) 

Le premier élément du tuple contient le code du sexe qui est stocké dans la base de données, et le second le texte que je veux afficher dans la QComboBox comme un élément.

Y a-t-il un moyen de définir la valeur de QComboBox sur M et d'afficher Mâle. Un même lorsque l'utilisateur de sélectionner l'élément mâle je pouvais obtenir la valeur choisie comme M.

Merci

Répondre

6

Utilisez

cb.addItem (text, userData) 

et passer la clé DB userData. Si vous devez changer la sélection actuelle, utilisez cb.itemData() pour obtenir la clé DB de chaque article et comparez-la à celle dont vous avez besoin.

Vous pouvez également enregistrer les index lorsque vous ajoutez des éléments dans une carte Python et utilisez-le pour rechercher directement l'index correct.

Pour rendre les choses plus faciles à utiliser, enveloppez le QComboBox avec une classe Python qui offre des setters et des getters pour la clé DB actuelle et qui masque le mapping.

+0

Merci, je pense que ce sera facile à implémenter. Le seul problème que je vais avoir est d'utiliser le QComboBox personnalisé dans Qt Designer. Y a-t-il un moyen facile d'ajouter le nouveau contrôle? Pensez-vous qu'il sera plus facile d'utiliser un modèle qt ?, Je l'ai déjà vérifié et il peut contenir le mapping que vous mentionnez. Mais ayant encore des problèmes de réglage de la valeur de la valeur db. – Danilo

+0

Voir les docs pour savoir comment construire des widgets dans PyQt qui peuvent être utilisés dans le concepteur: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#using-python-widgets-in-qt -designer –