Python gtk: ComboBoxEntry с перечислением

#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