如何在wxPython ComboBox中存储非字符串对象?

2 投票
2 回答
2266 浏览
提问于 2025-04-16 08:29

我有一个包含多个顶点(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

这样应该就可以了。

撰写回答