开发者

python: Using the choice box to get data besides getString()

开发者 https://www.devze.com 2023-03-09 20:07 出处:网络
I have defined an object that has several attribute.. class thing(object): def __init__(self, type, name, attrA, attrB, attrC):

I have defined an object that has several attribute..

class thing(object):
    def __init__(self, type, name, attrA, attrB, attrC):
        self.type = type
        self.name = name
        self.attrA = attrA
        self.attrB = attrB
        self.attrC = attrC

lets say then I have a list of things

self.things=[thing('car','fred',1,2,3),
             thing('car','george',a,b,c),
             thing('truck','bob',6,7,8),
             thing('truck','tom',x,y,z)
            ]

I then populate a choice box with SOME of the items from that list

for each in self.things:
    if each.type == 'car':
       self.choiceCar.Append(item=each.name)

When the user selects Bob from the dropdown I have an event for that

def EvtChoice(self,event):
    self.Name = event.GetString()

This captures the name of the selection, but how do I get the other attributes? W开发者_如何学Chat I am currently doing is

     for each in self.items:
        if self.Name == each.name
          #Get other things here

My thought is that if my list grows large then this loop through my entire list will become very inefficient and really unneeded since the user has already selected the specific item I want. What I think I should be able to do is to get the index of the selected item, but im not sure how to do that, or even if that is the correct way to go about it.


Associating data or objects with wx.Choice or wx.ComboBox is pretty easy. You can see an example using the latter here:

http://www.blog.pythonlibrary.org/2010/12/16/wxpython-storing-object-in-combobox-or-listbox-widgets/

The basic idea is to pass an empty list to the control's constructor and then iterate over the objects and Append them to the control. So something like this:

for obj in self.things:
    self.choiceCar.Append(obj.name, obj)

Then in the event handler for the widget, you can get the object back by doing this:

obj = self.choiceCar.GetClientData(self.choiceCar.GetSelection())
0

精彩评论

暂无评论...
验证码 换一张
取 消