2015-01-15 4 views
1

Есть ли простой способ создать спинбокс в PyQt4, чьи переменные значения являются строками? Я хочу создать спинбокс, который варьируется между «низким», «средним» и «высоким». Я огляделся и не могу найти ничего, что не выглядит очень сложным. В Tkinter может выглядеть тривиальным, как:PyQt4: строки QSpinBox

self.my_wordy_spinbox = Spinbox(parent, 
           values = ['Medium', 'High', 'Low'], 
           textvariable = self.object_strength) 

я заметил в documentation он сказал: «QSpinBox предназначен для обработки целых и дискретные наборы значений (например, названия месяцев)», которые я думал, что может привести к строкам, но я больше не мог найти. Я соблазн использовать combobox вместо этого, но я чувствую, что spinbox будет более уместным.

ответ

2

Я действительно не вижу, как это могло бы быть улучшением по сравнению со списком, особенно если есть несколько строк.

Однако, если вы действительно хотите, вам просто нужно создать подкласс QSpinBox и переопределение textFromValue и valueFromText:

class StringBox(QtGui.QSpinBox): 
    def __init__(self, strings, parent=None): 
     super(StringBox, self).__init__(parent) 
     self.setStrings(strings) 

    def strings(self): 
     return self._strings 

    def setStrings(self, strings): 
     self._strings = tuple(strings) 
     self._values = dict(zip(strings, range(len(strings)))) 
     self.setRange(0, len(strings) - 1) 

    def textFromValue(self, value): 
     return self._strings[value] 

    def valueFromText(self, text): 
     return self._values[text]