我有一个带有几个选项的ListBox。我想在调用SetSelection时生成wx.EVT_LISTBOX。据我所知,SetSelection不会生成事件以防止初始化期间出现问题。所以我有一个功能
#include <type_traits>
template <typename F, typename... Ts>
constexpr bool is_one_of = (std::is_same<F, Ts>{} || ...);
template <typename...>
constexpr bool is_unique = true;
template <typename F, typename... Ts>
constexpr bool is_unique<F, Ts...> = is_unique<Ts...> && !is_one_of<F, Ts...>;
我还有一个简单的功能来处理选择项目
def selectItem(self, index):
self.myList.SetSelection(index)
event = wx.PyCommandEvent(wx.EVT_LISTBOX.typeId, self.myList.GetId())
wx.PostEvent(self, event)
这将运行,但是当使用SelectItem()时,事件对象为None,因此当我尝试使用GetStringSelection()时出现错误。我怎样才能解决这个问题?任何帮助表示赞赏。有更好的方法吗?
实际上,重新考虑这一点,我可能不需要生成事件来完成我正在做的事情,但我仍然很好奇为什么这不能按预期工作
答案 0 :(得分:0)
您确实回答了自己的问题,首先不应该生成任何事件,而是从DoSelect(self, string)
和selectItem()
调用一些OnSelect()
函数。< / p>
答案 1 :(得分:0)
它正在发生,因为您在创建活动时没有调用event.SetEventObject(self.myList)
。