首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >wx.ListCtrl:告诉用户的点击从程序的a_listctrl.Select()

wx.ListCtrl:告诉用户的点击从程序的a_listctrl.Select()
EN

Stack Overflow用户
提问于 2010-07-05 15:38:02
回答 1查看 1.3K关注 0票数 3

第一个问题贴到这样。

当用户单击ListCtrl小部件时,它会生成一个EVT_LIST_ITEM_SELECTED事件。但是,如果我希望在向用户显示之前设置列表,以便已经突出显示了几个项(通过在ListCtrl上调用Select() ),则小部件将生成相同的事件。此事件是我的应用程序处理的错误,就好像它是一个真正的用户选择一样。

由于wxPython使用消息传递,所以在进行编程选择之前,不能简单地设置一个标志(ignore_selection_events),然后再清除它。与所有类似的情况一样,在调用第一个EVT_LIST_ITEM_SELECTED处理程序/回调之前,将清除标志。

我试过的一些解决方案和哪里出了问题

  • ListCtrl的一个成员允许关闭EVT_LIST_ITEM_SELECTED的生成。我看过了,我肯定这不存在。
  • 我可以使用wx.Timer将取消ignore_selection_event标志的时间推迟到上次调用Select()之后的一段时间。准确的时间很容易出错。它可能无法工作(时间太短)或可能导致真正的用户选择迷路(计时器太长)。
  • 应该可以使用PostEvent或ProcessEvent让ListCtrl在生成第一个EVT_LIST_ITEM_SELECTED之前和生成最后一个EVT_LIST_ITEM_SELECTED之前生成一个特殊的ignore_selections事件。我尝试过这样做,但忽略事件消息的回调没有按我预期的顺序调用: = MyEvent(myEVT_TOGGLE_SELECTION_IGNORE) wx.PostEvent(self.list_ctl,evt) //此处理程序名为fist wx.CallAfter (self.list_ctl.Select,item,1) //此处理程序调用last (grrr) evt = MyEvent(myEVT_TOGGLE_SELECTION_IGNORE) wx.PostEvent(self.list_ctl,evt) //此处理程序称为第二处理程序。
  • 最后,我刚刚想到暂时解除对EVT_LIST_ITEM_SELECTED事件处理程序的绑定。这可能会遇到与使用标志相同的问题。也就是说,在wxPython开始异步处理Select()调用之前,将替换处理程序,因此仍将调用处理程序。刚试了一下就会让鬼立刻上吊。我尝试使用self.list_ctl.Bind(wx.EVT_LIST_ITEM_SELECTED, do_nothing),但是使用一个没有CallAfter的,在这两种情况下gui都会立即挂起。

好吧,交给你吧!

更新:

谢谢杰夫!基于我尝试过的更多信息。

代码语言:javascript
复制
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可以轻松地修改项状态,而不必首先读取当前状态,或在所需的修改位中,然后再写回。

EN

回答 1

Stack Overflow用户

发布于 2010-07-05 17:02:54

试试SetItemState。我使用代码中的以下内容取消选择项:

代码语言:javascript
复制
self.ballotC.SetItemState(c, 0, wx.LIST_STATE_SELECTED) 

我会试着

代码语言:javascript
复制
self.ballotC.SetItemState(c, 1, wx.LIST_STATE_SELECTED)

代码语言:javascript
复制
self.ballotC.SetItemState(c, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED) 

若要选择项,请执行以下操作。这里有一些文档这里。这并不是说得那么清楚,所以你必须在正确的情况下再玩一玩。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3180708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档