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) 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 ) 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, 1, 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 def GetListCtrl(self): return self.list_ctrl 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()