需要为wxComboBox的选项分配ID,并在选中时检索选项的ID

时间:2018-03-23 13:05:07

标签: python combobox wxpython

我有一个从数据库中检索到的客户列表及其ID。 我想将它们添加到wxComboBox中,当它们被选中时,检索id而不是选项文本。客户端已按字母顺序排序,因此ID不按顺序排列。

我试过以下

    clients = get_client_list()
            for client in clients:
                self.client_comboBox.Append(client.name, client.id)

这不起作用。 我也尝试过使用

  

getSelection()

但这只是给我下拉列表中的选项位置。 我需要做的是检索所选选项的ID。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

一个简单的解决方法是构建要附加的项目,其中包含一个分隔符,选择后可以轻松split。 如果您将项目构造为client_id + tab + client_name,则只需分割所选字符串即可获得客户端ID。

import wx

class Myframe(wx.Frame):
    def __init__(self):
        self.count = 0
        wx.Frame.__init__(self, None)
        clients = ["Joe Bloggs","Arthur C Goggins","Gary Sable"]
        client_ids = ["10001","00326","51001"]
        self.panel = wx.Panel(self)
        self.cbx = wx.ComboBox(self.panel, -1, value="Choose an Option", pos=(10,30), size=(300,30),choices="")
        for item in range(len(clients)):
            self.cbx.Append(client_ids[item]+"\t"+clients[item])
        self.cbx.Bind(wx.EVT_COMBOBOX, self.on_selection)
        self.txt1 = wx.TextCtrl(self.panel, -1, "Selected Value", pos=(10,200), size=(300,30))
        self.txt2 = wx.TextCtrl(self.panel, -1, "Selected Selection", pos=(10,230), size=(300,30))
        self.txt3 = wx.TextCtrl(self.panel, -1, "Selected String", pos=(10,260), size=(300,30))
        self.txt4 = wx.TextCtrl(self.panel, -1, "Selected Id", pos=(10,290), size=(300,30))

    def on_selection(self, evt):
        Choice = self.cbx.GetValue()
        self.txt1.SetValue(Choice)
        Choice = self.cbx.GetSelection()
        self.txt2.SetValue(str(Choice))
        Choice = self.cbx.GetStringSelection()
        self.txt3.SetValue(Choice)
        Id = Choice.split("\t",1)[0]
        self.txt4.SetValue(Id)

if __name__ == "__main__":
    App = wx.App()
    Myframe().Show()
    App.MainLoop()

enter image description here