如何在wxPython ComboBox中存储非字符串对象?
我有一个包含多个顶点(Vertex)对象的列表,每个对象都有自己的标签和ID。请问我该如何使用这个列表来作为wxPython的下拉框(ComboBox)的模型,这样当用户选择一个选项时,我就能立刻获取到对应的顶点ID呢?
看起来下拉框只接受字符串作为模型。我不能创建一个标签和ID的字典,因为有些标签是重复的。
我注意到有一个ComboCtrl类,我可以通过继承它来创建一个特殊的下拉框,但我觉得应该有更简单的解决办法。
2 个回答
0
最简单的方法就是把顶点(也就是点)放在一个列表里,然后通过索引来获取你选择的值(这个索引是通过 wx.ComboBox 的 GetSelection()
方法返回的)。
补充:快速和简单的例子:
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)
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
这样应该就可以了。