我有一个包含三列的UltimateListCtrl。 第一个只显示索引,第二个显示选择小部件以选择操作,第三个具有一些静态文本小部件(参数),其数量和身份取决于第2栏中的选择。
当选择改变时,我得到一个关于它的CommandEvent,但我无法弄清楚我在哪个单元格。 我需要这个来更改第三列中的小部件。
附件是相关代码:
def addAction(self, action):
# set the Choice in the cell
index = self.list.InsertStringItem(sys.maxint, '')
self.list.SetStringItem(index, self.columns['#'], str(index))
self.list.SetStringItem(index, self.columns['Action'], '')
self.list.SetStringItem(index, self.columns['Parameters'], '')
item = self.list.GetItem(index, self.columns['Action'])
choice = wx.Choice(self.list, -1, name=action.name,
choices=[availableAction.name for availableAction in self.availableActions])
choice.Bind(wx.EVT_CHOICE, self.onActionChange)
item.SetWindow(choice, expand=True)
self.list.SetItem(item)
# set the third column's widgets
self.setItemParameters(index, action)
def onActionChange(self, event):
action = copy.deepcopy(self.availableActionsDict[event.GetString()])
# This doesn't work because this event doesn't have a GetIndex() function
self.setItemParameters(event.GetIndex(), action)
正如您在代码中看到的,我想找到已更改的Choice小部件的索引。 有谁知道怎么做? 我尝试通过查看列表中当前所选/焦点项目来获取项目索引,但它没有与正在更改的选项相关联。
答案 0 :(得分:0)
知道了! 我保持原样,只需使用SetClientData()将每个Choice小部件放在列表中:
def addAction(self, action):
# set the Choice in the cell
index = self.list.InsertStringItem(sys.maxint, '')
self.list.SetStringItem(index, self.columns['#'], str(index))
self.list.SetStringItem(index, self.columns['Action'], '')
self.list.SetStringItem(index, self.columns['Parameters'], '')
item = self.list.GetItem(index, self.columns['Action'])
choice = wx.Choice(self.list, -1, name=action.name,
choices=[availableAction.name for availableAction in self.availableActions])
choice.SetClientData(0, index)
choice.Bind(wx.EVT_CHOICE, self.onActionChange)
item.SetWindow(choice, expand=True)
self.list.SetItem(item)
# set the third column's widgets
self.setItemParameters(index, action)
def onActionChange(self, event):
action = copy.deepcopy(self.availableActionsDict[event.GetString()])
self.setItemParameters(event.GetEventObject().GetClientData(0), action)
每次更改索引时都需要更新(比如从列表中间删除某个项目时),但我可以接受它。
任何其他解决方案将不胜感激