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?
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.
Respond to Listctrl change exactly once