2010-04-20 10 views
5

Voglio usare un QComboBox con i "tasti" e "valori" di una tupla simile a quelli usati in un modello django. Ad esempio, ho la seguente struttura per il sesso di una persona.Chiave/Valore pyqt QComboBox

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

Il primo elemento della tupla contiene il codice del sesso che viene memorizzato nel database, e la seconda il testo che voglio visualizzare nel QComboBox come un elemento.

C'è un modo in cui posso impostare il valore QComboBox come M e visualizza Maschio. Un anche quando l'utente seleziona l'elemento maschile ho potuto ottenere il valore selezionato come M.

Grazie

risposta

6

Usa

cb.addItem (text, userData) 

e passare la chiave di DB come userData. Se è necessario modificare la selezione corrente, utilizzare cb.itemData() per ottenere la chiave DB di ciascun articolo e confrontarla con quella desiderata.

In alternativa, registrare gli indici quando si aggiungono elementi in una mappa Python e utilizzarli per cercare direttamente l'indice corretto.

Per rendere le cose più facili da usare, avvolgere lo QComboBox con una classe Python che offre setter e getter per la chiave DB corrente e che nasconde il mapping.

+0

Grazie, penso che sarà facile da implementare. L'unico problema che avrò è l'utilizzo del QComboBox personalizzato in Qt Designer. C'è un modo semplice per aggiungere il nuovo controllo? Pensi che sarà più semplice usare un modello qt ?, l'ho già verificato e può contenere la mappatura che hai menzionato. Ma continuano a riscontrare problemi nell'impostazione del valore dal valore db. – Danilo

+0

Vedere i documenti su come creare widget in PyQt che possono essere utilizzati nel designer: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#using-python-widgets-in-qt -progettista –