Donn Ingle wrote:
The docs show a SortItems() call that does this. (Note it doesn't
"maintain" it for you... you just call that method to ensure it is
sorted whenever you want it to be.)Thanks, I dunno how I missed that one. I'll go have another look.
The interface for wxPython might be non-obvious, especially to a beginner (not sure if you are one or not). Here's a trivialized example you can probably build on, which should explain what the note about "a callable object" means in the C++ docs:
Define a sorter class, something like this. It exists basically so __call__() can be defined for it:
class _StepSorter(object):
'''used in call to ListCtrl.SortItems()'''
def __call__(self, a, b):
# a and b were set by ListCtrl.SetItemData()
return cmp(a, b)
# when you insert/add items into the list, call SetItemData for them
# since that's what SortItems() passes to the sorter object:
index = self.listCtrl.InsertStringItem(0, 'some string')
self.listCtrl.SetItemData(index, someValue)
# elsewhere in your code...
stepSorter = _StepSorter() # could create this once and save
# now do the sort itself
self.listCtrl.SortItems(stepSorter)
At this point the list items are sorted according to how your __call__() comparator method in the sorter compares the values passed in, which are the values you passed to SetItemData(). I don't know whether you can pass in values that are not integers, not having tried it, but the docs suggest you won't be able to, so if you wanted to compare the strings themselves (e.g. for alphabetical order) you'd probably need to make someValue the same as index, and index into an array of strings that you'd store elsewhere, or look them up directly with GetItemText() or something. I haven't worked with this feature a lot... just hoping this helps a little. (My list items were basically images with numbers as labels, and I just wanted them sorted numerically so it was simple.)
-Peter