2010-04-20 17 views
5

Chcę użyć QComboBox z "kluczami" i "wartościami" z krotki podobnej do tej używanej w modelach django. Na przykład mam następującą strukturę dla płci danej osoby.Klucz/wartość pyqt QComboBox

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

Pierwszy element krotki zawiera kod z płcią, które są przechowywane w bazie danych, a drugi tekst, który chcę wyświetlić w QComboBox jako elementu.

Czy istnieje sposób, w którym mogę ustawić wartość QComboBox jako M i wyświetla ona Male. Również gdy użytkownik wybrać element Mężczyzna mógłby uzyskać wybraną wartość jako M.

Dzięki

Odpowiedz

6

Zastosowanie

cb.addItem (text, userData) 

i przekazać klucz DB jako userData. Jeśli chcesz zmienić bieżący wybór, użyj cb.itemData(), aby uzyskać klucz DB każdego elementu i porównać go z potrzebnym.

Alternatywnie, zapisz indeksy podczas dodawania elementów na mapie w języku Python i użyj tego do bezpośredniego wyszukania poprawnego indeksu.

Aby uczynić rzeczy łatwiejszymi w użyciu, zawiń QComboBox z klasą Python, która oferuje ustawiające i pobierające dla bieżącego klucza DB i który ukrywa odwzorowanie.

+0

Dzięki, myślę, że będzie to łatwe do wdrożenia. Jedyny problem, jaki będę miał, to użycie niestandardowego QComboBox w Qt Designer. Czy istnieje prosty sposób dodania nowego kontrolera? Czy uważasz, że łatwiej będzie użyć modelu qt ?, już to sprawdziłem i mogę przechowywać mapowanie, o którym wspomniałeś. Ale nadal występują problemy z ustawieniem wartości z wartości db. – Danilo

+0

Zobacz dokumenty dotyczące tworzenia widgetów w PyQt, które mogą być używane w projektancie: http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#using-python-widgets-in-qt -projektant –