wxPython - 如何在列表框中选择时生成事件?
wxPython - How to generate an event when selecting in a ListBox?
我有一个带有几个选项的列表框。我想在调用 SetSelection 时生成 wx.EVT_LISTBOX。我了解 SetSelection 不会生成事件以防止初始化期间出现问题。所以我有一个函数
def selectItem(self, index):
self.myList.SetSelection(index)
event = wx.PyCommandEvent(wx.EVT_LISTBOX.typeId, self.myList.GetId())
wx.PostEvent(self, event)
我还有一个简单的函数来处理选择项目
def OnSelect(self, event):
print event.GetEventObject().GetStringSelection()
这将 运行,但是当使用 SelectItem() 时,事件对象是 None,因此当我尝试使用 GetStringSelection() 时出现错误。我怎样才能解决这个问题?任何帮助表示赞赏。有更好的方法吗?
实际上,重新考虑这一点,我可能不需要生成事件来完成我正在做的事情,但我仍然很好奇为什么这没有按预期工作
您确实回答了您自己的问题,您一开始根本不应该生成事件,而只是从 selectItem()
和 OnSelect()
调用一些 DoSelect(self, string)
函数.
这是因为您在创建活动时没有调用 event.SetEventObject(self.myList)
。
我有一个带有几个选项的列表框。我想在调用 SetSelection 时生成 wx.EVT_LISTBOX。我了解 SetSelection 不会生成事件以防止初始化期间出现问题。所以我有一个函数
def selectItem(self, index):
self.myList.SetSelection(index)
event = wx.PyCommandEvent(wx.EVT_LISTBOX.typeId, self.myList.GetId())
wx.PostEvent(self, event)
我还有一个简单的函数来处理选择项目
def OnSelect(self, event):
print event.GetEventObject().GetStringSelection()
这将 运行,但是当使用 SelectItem() 时,事件对象是 None,因此当我尝试使用 GetStringSelection() 时出现错误。我怎样才能解决这个问题?任何帮助表示赞赏。有更好的方法吗?
实际上,重新考虑这一点,我可能不需要生成事件来完成我正在做的事情,但我仍然很好奇为什么这没有按预期工作
您确实回答了您自己的问题,您一开始根本不应该生成事件,而只是从 selectItem()
和 OnSelect()
调用一些 DoSelect(self, string)
函数.
这是因为您在创建活动时没有调用 event.SetEventObject(self.myList)
。