Как я могу хранить объекты кроме строк в ComboBox wxPython? - PullRequest
2 голосов
/ 14 декабря 2010

У меня есть список объектов Vertex, каждый со своими метками и идентификаторами.Как я могу использовать этот список в качестве модели для ComboBox wxPython, чтобы, когда пользователь выбирает опцию, я мог немедленно получить идентификатор вершины?

Похоже, что ComboBox принимает только строки в качестве модели.Я не могу создать словарь меток для пар идентификаторов, так как есть дубликаты меток.

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

Ответы [ 2 ]

5 голосов
/ 14 декабря 2010

Эта тема появилась сегодня на IRC-канале wxPython, но в отношении ListBox. К счастью, оба виджета наследуются от wx.ItemContainer, поэтому вы можете сделать следующее:

for item in ObjList:
    self.myCboBox.append(item.label, item)

Тогда в обработчике событий вы сделаете что-то вроде:

itemObject = self.myCboBox.GetClientData(self.myCboBox.GetSelection())
itemID = itemObject.id

Это должно сработать.

0 голосов
/ 14 декабря 2010

Самый простой подход - хранить вершины в списке и извлекать выбранное значение по индексу (возвращаемому wx.ComboBox GetSelection()).

Редактировать: Пример q & d:

l = [{"value" : value_1, "label" : "label"},
     {"value" : value_2, "label" : "label"}]

def on_select (event):
    i = event.GetSelection()
    print (l[i]["value"])

# ui construction omitted    

Bind (wx.EVT_COMBOBOX, on_slect)
...