#python-2.7 #combobox #enums #pygtk
#python-2.7 #combobox #перечисления #pygtk
Вопрос:
Я действительно изо всех сил пытаюсь найти пример для создания Enum и отправить его в качестве модели в ComboBoxEntry.
Может кто-нибудь загрузить пример правильного способа сделать это?
Вот начало моего кода:
model = "one", "two", "three"
liststore = gtk.ListStore(str)
for item in model:
liststore.append([item])
cbe = gtk.ComboBoxEntry(liststore)
Я хочу, чтобы модель была перечислена для возможности записи:
# for example:
cbe.set_active(one)
# or
if cbe.get_active() == model.one: ...
Большое спасибо
Ответ №1:
Я использую это :
## Length
nLines = tableData.data.shape[0]
## Width
nColons = len(tableData.columns)
## 1 adds an extra column for numbering (at the left side)
types = [str] * (nColonnes 1)
## build it
modelT = gtk.ListStore( * types )
и это должно сработать для вас :
>>> model = ["one", "two", "three"]
>>> types = [str] * len(model)
>>> lists = gtk.ListStore( * types )
Комментарии:
1. Извините, я просто хочу, чтобы «модель» была перечислена. поэтому, когда я напишу: myComboBoxEntry.set_active(один) , это сработает
Ответ №2:
В Python 3.4 появился новый тип данных Enum (также доступен бэкпорт enum34 и расширенная библиотека enum). Для установки enum34
или aenum
:
pip install enum34
, илиpip install aenum
После этого вы могли бы сделать model
Enum
примерно так:
from enum import Enum # or from aenum import Enum
class Model(str, Enum):
one = 'one'
two = 'two'
three = 'three'
с этими результатами:
>>> list(Model)
[<Model.one: 'one'>, <Model.two: 'two'>, <Model.three: 'three'>]
>>> Model.one
<Model.one: 'one'>
>>> Model.one == 'one'
True