wxPython - 如何在ListBox中选择时生成事件?

时间:2015-12-01 17:31:24

标签: python user-interface wxpython wxwidgets

我有一个带有几个选项的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()时出现错误。我怎样才能解决这个问题?任何帮助表示赞赏。有更好的方法吗?

实际上,重新考虑这一点,我可能不需要生成事件来完成我正在做的事情,但我仍然很好奇为什么这不能按预期工作

2 个答案:

答案 0 :(得分:0)

您确实回答了自己的问题,首先不应该生成任何事件,而是从DoSelect(self, string)selectItem()调用一些OnSelect()函数。< / p>

答案 1 :(得分:0)

它正在发生,因为您在创建活动时没有调用event.SetEventObject(self.myList)