i have this code

import wx
import datetime,re,os,time,urllib,errno
import sys
import wx.lib.mixins.listctrl  as  listmix


musicdata = {
0 : ("Bad English", "The Price Of Love", "Rock"),
1 : ("DNA featuring Suzanne Vega", "Tom's Diner", "Rock"),
2 : ("George Michael", "Praying For Time", "Rock"),
3 : ("Gloria Estefan", "Here We Are", "Rock"),
4 : ("Linda Ronstadt", "Don't Know Much", "Rock"),
5 : ("Michael Bolton", "How Am I Supposed To Live Without You", "Blues"),
6 : ("Paul Young", "Oh Girl", "Rock"),
}

musicdata2 = {
0 : ("Bad English", "The Price Of Love", "Rock"),
1 : ("DNA featuring Suzanne Vega", "Tom's Diner", "Rock"),
2 : ("George Michael", "Praying For Time", "Rock"),
3 : ("Gloria Estefan", "Here We Are", "Rock"),
4 : ("Linda Ronstadt", "Don't Know Much", "Rock"),
5 : ("Michael Bolton", "How Am I Supposed To Live Without You", "Blues"),
6 : ("Paul Young", "Oh Girl", "Rock"),
}
class Friend_info(object):
    def __init__(self, idd, name, photo):
        # id is used to keep tracking the rows after sorting
        self.id = id(self)
        self.idd = idd
        self.name = name
        self.photo = photo




class Messages(object):
    def __init__(self, fidd, message, time_sent):
        # id is used to keep tracking the rows after sorting
        self.id = id(self)
        self.fidd = fidd
        self.message = message
        self.time_sent = time_sent


class EditableListCtrl(wx.ListCtrl, listmix.TextEditMixin):
    ''' TextEditMixin allows any column to be edited. '''

    #----------------------------------------------------------------------
    def __init__(self, parent, ID=wx.ID_ANY, pos=wx.DefaultPosition,
                 size=wx.DefaultSize, style=0):
        """Constructor"""
        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
        listmix.TextEditMixin.__init__(self)


class Example(wx.Frame,listmix.ColumnSorterMixin):


    def __init__(self, *args, **kwargs):
        super(Example, self).__init__(*args, **kwargs) 

        self.InitUI()

    def InitUI(self):    


        #create the panel to present the  contact data with columns
        bSizer1 = wx.BoxSizer(wx.HORIZONTAL)
        sbSizer1 = wx.StaticBoxSizer(wx.StaticBox(self,wx.ID_ANY,u'User Info'),wx.VERTICAL)
        sbSizer1.SetMinSize(wx.Size(-1,400))

        bSizer3 = wx.BoxSizer(wx.VERTICAL)
        text3 =  wx.StaticText(self, wx.ID_ANY, u'Device User Photo',wx.DefaultPosition, wx.DefaultSize,0)
        text3.Wrap( -1 )
        bSizer3.Add(text3, 0, wx.ALL|wx.ALIGN_CENTER , 5 )


        bSizer4 = wx.BoxSizer(wx.HORIZONTAL)
        #bSizer4.SetMinSize(wx.Size(100,100))
        text4 =  wx.StaticText(self, wx.ID_ANY, u'Name:',wx.DefaultPosition, wx.DefaultSize,0)
        text4.Wrap( -1 )
        bSizer4.Add(text4, 0, wx.ALL , 5 )


        bSizer3.Add(bSizer4, 1, wx.ALL , 5 )

        bSizer5 = wx.BoxSizer(wx.HORIZONTAL)    
        #bSizer5.SetMinSize(wx.Size(100,100))

        text6 =  wx.StaticText(self, wx.ID_ANY, u'ID:',wx.DefaultPosition, wx.DefaultSize,0)
        text6.Wrap( -1 )
        bSizer5.Add(text6, 0, wx.ALL , 5 )


        bSizer3.Add(bSizer5, 1, wx.ALL , 5 )

        bSizer6 = wx.BoxSizer(wx.HORIZONTAL)    

        text8 =  wx.StaticText(self, wx.ID_ANY, u'User Email:',wx.DefaultPosition, wx.DefaultSize,0)
        text8.Wrap( -1 )
        bSizer6.Add(text8, 0, wx.ALL , 5 )


        bSizer3.Add(bSizer6, 1, wx.ALL , 5 )

        text10 =  wx.StaticText(self, wx.ID_ANY, u'Profile Link:',wx.DefaultPosition, wx.DefaultSize,0)
        text10.Wrap( -1 )
        bSizer3.Add(text10, 0, wx.ALL , 5 )


        sbSizer1.Add(bSizer3,1, wx.ALL , 5 )
        bSizer1.Add(sbSizer1,0, wx.ALL , 5 )

        notebook1 = wx.Notebook(self,wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0 )
        self.panel1 = wx.Panel(notebook1,wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )

        bSizer2 = wx.BoxSizer(wx.VERTICAL)    
        self.list_ctrl = EditableListCtrl(self.panel1 ,size=(-1,350), style=wx.LC_REPORT|wx.BORDER_SUNKEN|wx.LC_SORT_ASCENDING)
        self.list_ctrl.InsertColumn(0, 'ID', width=50)
        self.list_ctrl.InsertColumn(1, 'Display Name', width=150)
        self.list_ctrl.InsertColumn(2, 'Photo Profile',width=150)

        #wx.EVT_LIST_ITEM_ACTIVATED ---> with Enter it shows the photos
        self.list_ctrl.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onItemSelected)
        bSizer2.Add(  self.list_ctrl, 0, wx.ALL|wx.EXPAND, 5 )

        gSizer1 = wx.GridSizer( 0, 4, 0, 0 )

        text1 =  wx.StaticText(self.panel1, -1, 'Photo Profile',wx.Point(50,0),style=wx.ALIGN_CENTRE)
        text1.Wrap( -1 )
        gSizer1.Add( text1, 0, wx.ALL , 5 )

        text2 =  wx.StaticText(self.panel1, -1, 'Cover Photo',  style=wx.ALIGN_CENTRE)
        text2.Wrap( -1 )
        gSizer1.Add( text2, 0, wx.ALL , 5 )

        text11 =  wx.StaticText(self.panel1, -1, '',  style=wx.ALIGN_CENTRE)
        text11.Wrap( -1 )
        gSizer1.Add( text11, 0, wx.ALL , 5 )

        btn2 = wx.Button( self.panel1, wx.ID_ANY, u"Show information", wx.DefaultPosition, wx.DefaultSize, 0 )
        btn2.Bind(wx.EVT_BUTTON, self.add_line)
        gSizer1.Add( btn2, 0, wx.ALL |wx.ALIGN_RIGHT, 5 )

        bitmap1 = wx.StaticBitmap(self.panel1, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.Size(100,100), 0 )
        bitmap1.Bind(wx.EVT_BUTTON, self.onItemSelected)
        gSizer1.Add( bitmap1, 0, wx.ALL, 5 )

        bitmap2 = wx.StaticBitmap(self.panel1, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.Size(100,100), 0 )
        bitmap2.Bind(wx.EVT_BUTTON, self.onItemSelected)
        gSizer1.Add( bitmap2, 0, wx.ALL |wx.ALIGN_RIGHT, 5 )
        bSizer2.Add( gSizer1, 1, wx.EXPAND, 5 )

        self.panel1.SetSizer(bSizer2)
        self.panel1.Layout()
        bSizer2.Fit(self.panel1)
        notebook1.AddPage(self.panel1, u"Contacts Info", True )
        self.panel2 = wx.Panel( notebook1, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
        notebook1.AddPage( self.panel2, u"User Chat", False )

        bSizer7 = wx.BoxSizer(wx.VERTICAL)
#format=wx.LIST_FORMAT_CENTRE
        self.list_ctrl2 = EditableListCtrl(self.panel2 ,size=(-1,450), style=wx.LC_REPORT|wx.BORDER_SUNKEN |wx.LC_SORT_ASCENDING)
        self.list_ctrl2.InsertColumn(0, 'Fid', width=150)
        self.list_ctrl2.InsertColumn(1,'Message', width=250)
        self.list_ctrl2.InsertColumn(2, 'Time Sent',width=150)

        self.list_ctrl2.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onItemSelected)
        bSizer7.Add(  self.list_ctrl2, 0, wx.ALL|wx.EXPAND, 5 )
        self.panel2.SetSizer(bSizer7)

        btn3 = wx.Button( self.panel2, wx.ID_ANY, u"Show information", wx.DefaultPosition, wx.DefaultSize, 0 )
        btn3.Bind(wx.EVT_BUTTON, self.add_message)
        bSizer7.Add(btn3, 0, wx.ALL|wx.ALIGN_RIGHT, 5 )

        bSizer1.Add(notebook1, 1, wx.EXPAND |wx.ALL, 5 )

        self.SetSizer( bSizer1 )
        self.Layout()  

        self.SetSize((1000, 650))
        self.SetTitle('Simple menu')
        self.Move((100,100))
        self.Show(True)

        items = musicdata.items()
        row_list =[]
        self.myRowDict = {}

        #print items
        for key,data in  items:
            row_list.append(Friend_info(data[0],data[1],data[2]))
        index1 = 0
        for row in row_list:
            self.list_ctrl.SetItemData(index1, row.id)
            self.myRowDict[index1] = row
            index1 += 1

        items2 = musicdata2.items()
        row_list2 =[]
        self.myRowDict2 = {}
        index2 = 0
        for key,data in items2:
            row_list2.append(Messages(data[0],data[1],data[2]))
        for row in row_list2:
            self.list_ctrl2.SetItemData(index2, row.id)
            self.myRowDict2[index2] = row
            index2 += 1

    # button event for adding elements   
    def add_line(self, event):
        index = 0
        items = musicdata.items()     
        for key, data in items:
            self.list_ctrl.InsertStringItem(index, data[0])
            self.list_ctrl.SetStringItem(index,1, data[1])
            self.list_ctrl.SetStringItem(index, 2,data[2])
            self.list_ctrl.SetItemData(index, key)
            index += 1 


        self.itemDataMap = musicdata
        listmix.ColumnSorterMixin.__init__(self, 3)
        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick, self.list_ctrl)

    def add_message(self, event):
        index = 0
        items = musicdata2.items()     
        for key, data in items:
            self.list_ctrl2.InsertStringItem(index, data[0])
            self.list_ctrl2.SetStringItem(index,1, data[1])
            self.list_ctrl2.SetStringItem(index, 2,data[2])
            self.list_ctrl2.SetItemData(index, key)
            index += 1 

        self.itemDataMap = musicdata2
        listmix.ColumnSorterMixin.__init__(self, 3)
        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick, self.list_ctrl2)

    def GetListCtrl(self):
        return self.list_ctrl2 

    def OnColClick(self, event):
        print "column clicked"
        event.Skip()      


    def onItemSelected(self,event):
        global size
        self.currentItem = event.m_itemIndex
        friend_info = self.myRowDict[self.list_ctrl.GetItemData(self.currentItem)]

        self.currentItem2 = event.m_itemIndex
        message = self.myRowDict2[self.list_ctrl2.GetItemData(self.currentItem2)]

        self.imageFile = "images/profile/%d.jpg" %int(friend_info.name)
        self.bmp = wx.Image(self.imageFile,wx.BITMAP_TYPE_JPEG).ConvertToBitmap()
        bitmap1 = wx.StaticBitmap(self.panel1, -1, self.bmp, (5,400), (100,100))
        self.imageFile2 = "images/cover/%d.jpg" %int(friend_info.name)
        #img = Image.open('images/cover/%d.jpg'%int(friend_info.name))
        if os.path.exists(self.imageFile2):
        #dimensions_cover = img.size
            self.bmp2 = wx.Image(self.imageFile2,wx.BITMAP_TYPE_JPEG).ConvertToBitmap()
            bitmap2 = wx.StaticBitmap(self.panel1, -1, self.bmp2, (200,390))
        print friend_info.name

def main():

    ex = wx.App()
    Example(None)
    ex.MainLoop()    


if __name__ == '__main__':
    main()        

now the sort is working for the second tab User Chat and when i change

        def GetListCtrl(self):
            return self.list_ctrl2 

to

        def GetListCtrl(self):
            return self.list_ctrl

the sort is working for the first tab Contacts info after clicking to a column but i want to make them work simultaneously how i am going to make it?

Is wxPython still around?

Yes still alive.
Lastet officale oppdate is(25-Dec-2013) wxPython (classic) 3.0.0.0

It will soon be ready for Python 3,work is going on Project Phoenix
Work well for Python 3,to test it out look here

Post a simple example of what you want to do. 276 lines of code is too much as we are trying to guess from your code what you are trying to do. Note that no sorting is done in the code below and in fact the functions are not necessary as they just return an existing variable.

    def GetListCtrl(self):
        return self.list_ctrl2 

    def GetListCtrl(self):
        return self.list_ctrl

Edited 2 Years Ago by woooee

This article has been dead for over six months. Start a new discussion instead.