Sort wxpython listctrl column by integers

730 views Asked by At

I would like to sort last column on user click. Sorting is working but it sort literally. How to sort last column numerically and first 2 columns literally?

Thank You in advance!

Pasted example code I found somewhere on net.

import wx
import sys
from wx.lib.mixins.listctrl import ColumnSorterMixin

actresses = {
1 : ('jessica alba', 'pomona', '1'), 
2 : ('sigourney weaver', 'new york', '2'),
3 : ('angelina jolie', 'los angeles', '11'), 
4 : ('natalie portman', 'jerusalem', '12'),
5 : ('rachel weiss', 'london', '20'), 
6 : ('scarlett johansson', 'new york', '22') 
}


class SortedListCtrl(wx.ListCtrl, ColumnSorterMixin):
    def __init__(self, parent):
        wx.ListCtrl.__init__(self, parent, -1, style=wx.LC_REPORT)
        ColumnSorterMixin.__init__(self, len(actresses))
        self.itemDataMap = actresses

    def GetListCtrl(self):
        return self

class Actresses(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(380, 230))

        hbox = wx.BoxSizer(wx.HORIZONTAL)

        panel = wx.Panel(self, -1)

        self.list = SortedListCtrl(panel)
        self.list.InsertColumn(0, 'name', width=140)
        self.list.InsertColumn(1, 'place', width=130)
        self.list.InsertColumn(2, 'year', wx.LIST_FORMAT_RIGHT, 90)

        items = actresses.items()

        for key, data in items:
            index = self.list.InsertStringItem(sys.maxsize, data[0])
            self.list.SetStringItem(index, 1, data[1])
            self.list.SetStringItem(index, 2, data[2])
            self.list.SetItemData(index, key)

        hbox.Add(self.list, 1, wx.EXPAND)
        panel.SetSizer(hbox)

        self.Centre()
        self.Show(True)

app = wx.App()
Actresses(None, -1, 'actresses')
app.MainLoop()
0

There are 0 answers