2010-04-20 19 views
5

Ich möchte eine QComboBox mit den "Schlüsseln" und "Werten" aus einem Tupel ähnlich denen in einem Django-Modelle verwendet werden. Zum Beispiel habe ich die folgende Struktur für das Geschlecht einer Person.Schlüssel/Wert pyqt QComboBox

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

Das erste Element des Tupels enthält den Code des Geschlechts, die in der Datenbank gespeichert ist, und die zweite der Text, den ich in der QComboBox als ein Element angezeigt werden soll.

Gibt es einen Weg, in dem ich den QComboBox-Wert als M setzen könnte und es Male anzeigt. Eine auch wenn der Benutzer das Element Male ich den ausgewählten Wert als M. bekommen konnte

Dank

Antwort

6

Verwenden

cb.addItem (text, userData) 

und übergeben Sie den DB-Taste als userData. Wenn Sie die aktuelle Auswahl ändern müssen, verwenden Sie cb.itemData(), um den DB-Schlüssel jedes Elements zu erhalten und es mit dem zu vergleichen, das Sie benötigen.

Alternativ können Sie die Indizes beim Hinzufügen von Elementen in einer Python-Map aufzeichnen und direkt den richtigen Index nachschlagen.

Um die Handhabung zu vereinfachen, packen Sie die QComboBox mit einer Python-Klasse, die Setter und Getter für den aktuellen DB-Schlüssel bietet und das Mapping verbirgt.

+0

Danke, ich denke, es wird einfach zu implementieren sein. Das einzige Problem, das ich haben werde, ist die Verwendung der benutzerdefinierten QComboBox in Qt Designer. Gibt es eine einfache Möglichkeit, das neue Steuerelement hinzuzufügen? Glauben Sie, dass es einfacher ist, ein QT-Modell zu verwenden? Ich habe es bereits überprüft und es kann das von Ihnen erwähnte Mapping enthalten. Aber immer noch Probleme beim Setzen des Wertes aus dem DB-Wert. – Danilo

+0

Weitere Informationen zum Erstellen von Widgets in PyQt, die im Designer verwendet werden können, finden Sie in der Dokumentation: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#using-python-widgets-in-qt -designer –