如何在wxPython ComboBox中存储字符串以外的对象?

时间:2010-12-13 21:36:43

标签: python combobox wxpython

我有一个Vertex对象列表,每个对象都有自己的标签和id。如何将此列表用作wxPython ComboBox的模型,以便当用户选择一个选项时,我可以立即检索Vertex id?

似乎ComboBox只接受字符串作为模型。我无法创建标签到id对的字典,因为有重复的标签。

我注意到一个ComboCtrl类,我可以创建一个专门的组合框子类,但我觉得有一个更简单的解决方案。

2 个答案:

答案 0 :(得分:5)

今天早些时候,wxPython IRC频道出现了这个话题,但是关于ListBox。幸运的是,这两个小部件都继承自wx.ItemContainer,因此您可以执行以下操作:

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

然后在事件处理程序中,您将执行以下操作:

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

这应该有效。

答案 1 :(得分:0)

最简单的方法是将顶点存储在列表中并按索引检索选定的值(由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)