只响应一次 Listctrl 更改
我正在使用 wxPython 开发一个表单,我希望 listctrl 的值列表根据另一个 listctrl 的选择进行更改。为此,我使用链接到控制对象的 EVT_LIST_ITEM_SELECTED
和 EVT_LIST_ITEM_DESELECTED
事件的方法来调用 Publisher.sendMessage
。要更改的控件有一个方法,该方法是该发布者的订阅者。这是有效的:当单击第一个 listctrl 时,会刷新第二个 listctrl。
问题是必须从数据库刷新数据,并且每次选择和取消选择都会发送一条消息。这意味着即使我只是单击一个项目,数据库也会被查询两次(一次用于取消选择,然后再次用于选择)。如果我按住 Shift 键并单击以多选 5 个项目,则会进行 5 次调用。有没有办法让 listctrl 响应集合,而不是单独的选择?
I'm working on a form using wxPython where I want want listctrl's list of values to change based on the selection of another listctrl. To do this, I'm using methods linked to the controlling object's EVT_LIST_ITEM_SELECTED
and EVT_LIST_ITEM_DESELECTED
events to call Publisher.sendMessage
. The control to be changed has a method that is a subscriber to that publisher. This works: when the first listctrl is clicked, the second is refreshed.
The problem is that the data must be refreshed from the database and a message is sent for every selection and deselection. This means that even if I simply click on one item, the database gets queried twice (once for the deselection, then again for the selection). If I shift-click to multi-select 5 items, then 5 calls get made. Is there any way to have the listctrl respond to the set, rather than the individual selections?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
最好的解决方案似乎是使用带有标志的
wx.CallAfter
来执行后续过程一次:The best solution seems to be to use
wx.CallAfter
with a flag to execute the follow-up procedure exactly once:您可以尝试 EVT_LIST_ITEM_RIGHT_CLICK。那应该有效。否则,您需要使用一个标志,并在每次选择事件触发时检查该标志,以查看是否需要查询数据库。还有 UltimateListCtrl,一个纯 python 小部件,您也可以破解它来执行此操作。
You can try EVT_LIST_ITEM_RIGHT_CLICK. That should work. Otherwise you'd want to use a flag and check said flag every time the selection event fires to see if it needs to query the database or not. There's also the UltimateListCtrl, a pure python widget, that you can probably hack to do this too.
您可以推送自定义事件处理程序
You can push in a custom event handler