第一个问题贴到这样。
当用户单击ListCtrl小部件时,它会生成一个EVT_LIST_ITEM_SELECTED事件。但是,如果我希望在向用户显示之前设置列表,以便已经突出显示了几个项(通过在ListCtrl上调用Select() ),则小部件将生成相同的事件。此事件是我的应用程序处理的错误,就好像它是一个真正的用户选择一样。
由于wxPython使用消息传递,所以在进行编程选择之前,不能简单地设置一个标志(ignore_selection_events),然后再清除它。与所有类似的情况一样,在调用第一个EVT_LIST_ITEM_SELECTED处理程序/回调之前,将清除标志。
我试过的一些解决方案和哪里出了问题
self.list_ctl.Bind(wx.EVT_LIST_ITEM_SELECTED, do_nothing),但是使用一个没有CallAfter的,在这两种情况下gui都会立即挂起。好吧,交给你吧!
更新:
谢谢杰夫!基于我尝试过的更多信息。
list_ctrl.SetItemState(item_index, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED) #works
list_ctrl.SetItemState(item_index, 0xFFFFFFFF, wx.LIST_STATE_SELECTED) #works
list_ctrl.SetItemState(item_index, 1, wx.LIST_STATE_SELECTED) # does NOT work因此,使用状态和掩码args可以轻松地修改项状态,而不必首先读取当前状态,或在所需的修改位中,然后再写回。
发布于 2010-07-05 17:02:54
试试SetItemState。我使用代码中的以下内容取消选择项:
self.ballotC.SetItemState(c, 0, wx.LIST_STATE_SELECTED) 我会试着
self.ballotC.SetItemState(c, 1, wx.LIST_STATE_SELECTED)或
self.ballotC.SetItemState(c, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED) 若要选择项,请执行以下操作。这里有一些文档这里。这并不是说得那么清楚,所以你必须在正确的情况下再玩一玩。
https://stackoverflow.com/questions/3180708
复制相似问题