我有一个选择框
self.chHead = wx.Choice(self.nbItemPane, -1, choices=[])
我有一个清单
items=[equipment('Head','BIG HELMET',555,5,5,5,5,5,0,0,0,0,0),
equipment('Head','MED HELMET',555,5,5,5,5,5,0,0,0,0,0),
equipment('Head','SMA HELMET',555,5,5,5,5,5,0,0,0,0,0),
equipment('Shoulders','BIG SHOULDERS',555,5,5,5,5,5,0,0,0,0,0)
]
我想要发生的是我的选择框的选择值将从项目列表中提取。因此,在这种情况下,当您选择self.chHead的下拉列表时,您只会看到“BIG HELMET”,“MED HELMET”和“SMA HELMET”作为选项
设备定义为
class equipment(object):
def __init__(self, slot, name, armor, str, int, wis, dex, end, val, tough, power, crit, hit):
"""
Model of the Equipment Object
Contains the followign attributes:
"""
self.slot = slot
self.name = name
self.armor = armor
self.str = str
self.int = int
self.wis = wis
self.dex = dex
self.end = end
self.val = val
self.tough = tough
self.power = power
self.crit = crit
self.hit = hit
答案 0 :(得分:0)
这取决于您对equipment
的定义。我假装它是一个具有函数GetSlot()
和GetName()
的类,用于检索前两个字段。您可以从以下项目列表中创建choices
列表:
choices = [item.GetName() for item in items if item.GetSlot() == 'Head']
self.chHead = wx.Choice(self.nbItemPane, -1, choices=choices)
唯一的问题是,您没有简单的方法来了解您的选择所引用的items
列表中的哪个项目,特别是如果两个或多个项目具有相同的名称。您可以通过将每个列表项的clientData
设置为items
列表的相应索引来解决此问题。这样做:
self.chHead = wx.Choice(self.nbItemPane, -1)
for i in range(len(items)):
if items[i].GetSlot() == 'Head':
self.chHead.Append(item=item[i].GetName(), clientData=i)