2010-04-20 15 views
5

Quiero usar un QComboBox con las "claves" y los "valores" de una tupla similar a las utilizadas en los modelos django. Por ejemplo, tengo la siguiente estructura para el sexo de una persona.Key/Value pyqt QComboBox

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

El primer elemento de la tupla contiene el código del sexo que se almacena en la base de datos, y el segundo, el texto que quiero mostrar en el QComboBox como un elemento.

¿Hay alguna manera en la que podría establecer el valor de QComboBox como M y muestra Hombre. An también cuando el usuario seleccione el elemento masculino que podría obtener el valor seleccionado como M.

Gracias

Respuesta

6

Uso

cb.addItem (text, userData) 

y pasar la clave DB como userData. Si necesita cambiar la selección actual, use cb.itemData() para obtener la clave de BD de cada artículo y compárela con la que necesita.

O bien, registre los índices a medida que agrega elementos en un mapa de Python y utilícelos para buscar directamente el índice correcto.

Para hacer las cosas más fáciles de usar, ajuste el QComboBox con una clase de Python que ofrece arreglos y captadores para la clave de base de datos actual y que oculta la asignación.

+0

Gracias, creo que será fácil de implementar. El único problema que tendré es usar el QComboBox personalizado en Qt Designer. ¿Hay alguna manera fácil de agregar el nuevo control? ¿Crees que será más fácil usar un modelo de qt ?, ya lo he comprobado y puede contener el mapeo que mencionas. Pero aún tiene problemas para establecer el valor desde el valor db. – Danilo

+0

Consulte los documentos sobre cómo crear widgets en PyQt que se pueden usar en el diseñador: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#using-python-widgets-in-qt -diseñador –