class MyFrame(wx.Frame): def __init__(self, *args, **kwds): wx.Frame.__init__(self, *args, **kwds) self.Init() def Init(self): self.InitModel() self.InitWidgets() self.InitObjectListView() def InitModel(self): self.songs = ExampleModel.GetTracks() def InitWidgets(self): panel = wx.Panel(self, -1) sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_1.Add(panel, 1, wx.ALL|wx.EXPAND) self.SetSizer(sizer_1) self.myOlv = ObjectListView(panel, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER) sizer_2 = wx.BoxSizer(wx.VERTICAL) sizer_2.Add(self.myOlv, 1, wx.ALL|wx.EXPAND, 4) panel.SetSizer(sizer_2) self.Layout() def InitObjectListView(self): groupImage = self.myOlv.AddImages(ExampleImages.getGroup16Bitmap(), ExampleImages.getGroup32Bitmap()) userImage = self.myOlv.AddImages(ExampleImages.getUser16Bitmap(), ExampleImages.getUser32Bitmap()) musicImage = self.myOlv.AddImages(ExampleImages.getMusic16Bitmap(), ExampleImages.getMusic32Bitmap()) soloArtists = ["Nelly Furtado", "Missy Higgins", "Moby", "Natalie Imbruglia", "Dido", "Paul Simon", "Bruce Cockburn"] def artistImageGetter(track): if track.artist in soloArtists: return userImage else: return groupImage def sizeToNiceString(byteCount): """ Convert the given byteCount into a string like: 9.9bytes/KB/MB/GB """ for (cutoff, label) in [(1024*1024*1024, "GB"), (1024*1024, "MB"), (1024, "KB")]: if byteCount >= cutoff: return "%.1f %s" % (byteCount * 1.0 / cutoff, label) if byteCount == 1: return "1 byte" else: return "%d bytes" % byteCount self.myOlv.SetColumns([ ColumnDefn("Title", "left", 120, "title", imageGetter=musicImage), ColumnDefn("Artist", "left", 120, "artist", imageGetter=artistImageGetter), ColumnDefn("Size", "center", 100, "sizeInBytes", stringConverter=sizeToNiceString), ColumnDefn("Last Played", "left", 100, "lastPlayed", stringConverter="%d-%m-%Y"), ColumnDefn("Rating", "center", 100, "rating") ]) self.myOlv.SetObjects(self.songs)
class TruckListView(wx.Panel): """ This will the first component in our app, displaying the truck inventory and a form to add new ones """ def __init__(self, parent): wx.Panel.__init__(self, parent=parent) self.dataOlv = Olv(self, wx.ID_ANY, style=wx.LC_REPORT) done = wx.Bitmap("data/Checkmark.png", wx.BITMAP_TYPE_ANY) progress = wx.Bitmap("data/Progress.png", wx.BITMAP_TYPE_ANY) self.done = self.dataOlv.AddImages(wx.Icon(done)) self.progress = self.dataOlv.AddImages(wx.Icon(progress)) self.dataOlv.SetColumns([ ColumnDefn("Buyer", "left", 180, "current_buyer", imageGetter=self.image_getter), ColumnDefn("VIN", "right", 180, "vin_number"), ColumnDefn("Year", "right", 70, "year"), ColumnDefn("Make", "right", 70, "make"), ColumnDefn("Description", "right", 140, "description"), ColumnDefn("Previous Owner", "right", 140, "prev_owner"), ColumnDefn("Purchase Cost", "right", 140, "purchase_cost", stringConverter=numbers_with_commas) ]) self.dataOlv.rowFormatter = truck_row_formatter self.dataOlv.cellEditMode = Olv.CELLEDIT_SINGLECLICK sizer = wx.BoxSizer(wx.HORIZONTAL) sizer.Add(self.dataOlv, 1, wx.ALL | wx.EXPAND, 5) self.SetSizer(sizer) def set_trucks(self, truck_list): self.dataOlv.SetObjects(truck_list) def add_truck(self, truck): self.dataOlv.AddObject(truck) def get_selected(self): return self.dataOlv.GetSelectedObject() def image_getter(self, truck): if truck.status == Truck.COMPLETED: return self.done elif truck.status == Truck.RENTED or truck.status == Truck.FINANCED: return self.progress
class DataCoefPanel(wx.Frame): def __init__(self, parent): pos = wx.DefaultPosition size = (377, 282) if _platform == 'darwin': style = wx.DEFAULT_FRAME_STYLE else: style = (wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN | wx.FRAME_FLOAT_ON_PARENT) wx.Frame.__init__(self, wx.GetApp().TopWindow, wx.ID_ANY, p4R.Application_name + " - Strain and DW Values", pos, size, style) self.Bind(wx.EVT_CLOSE, self.on_close) self.SetIcon(prog_icon.GetIcon()) pnl = wx.Panel(self) def handleCellEditStarting(evt): currentCol = self.GetOLVColClicked(evt) if currentCol == 0: evt.Veto() def handleCellEditFinishing(evt): currentline = evt.rowIndex currentCol = self.GetOLVColClicked(evt) val = evt.cellValue self.update_param_dict(currentline, currentCol, val) self.list = ObjectListView(pnl, sortable=False, style=wx.LC_REPORT | wx.SUNKEN_BORDER, size=(450, 500)) self.list.cellEditMode = ObjectListView.CELLEDIT_SINGLECLICK self.list.handleStandardKeys = False self.list.SetEmptyListMsg("This database has no rows") self.list.SetEmptyListMsgFont( wx.FFont(24, wx.DEFAULT, faceName="Tekton")) if _platform == "linux" or _platform == "linux2": self.width_name = 120 else: self.width_name = 80 self.width = 70 self.widthCheck = 25 self.col2checkstatus = {1: 0, 2: 0} self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.list) self.Bind(wx.EVT_LIST_COL_CLICK, self.OnItemSelected, self.list) self.list.Bind(EVT_CELL_EDIT_STARTING, handleCellEditStarting) self.list.Bind(EVT_CELL_EDIT_FINISHING, handleCellEditFinishing) mastersizer = wx.BoxSizer(wx.HORIZONTAL) mastersizer.Add(self.list, 0, wx.ALL | wx.EXPAND, 5) pub.subscribe(self.on_fill_list, pubsub_Fill_List_coef) pub.subscribe(self.on_open_window, pubsub_Open_data_coef_Window) # self.Bind(wx.EVT_SIZE, self.OnSize) pnl.SetSizer(mastersizer) pnl.Layout() pnl.Fit() self.InitializeList() def on_open_window(self): self.CenterOnParent() def on_close(self, event): pub.sendMessage(pubsub_Hide_Show_data_coef, test=1) def InitializeList(self): temp = [] ic_ = prog_icon_curve.GetBitmap() ImageIndex = self.list.AddImages(ic_) self.list.AddNamedImages("name", ic_) temp.append( ColumnDefn(headercolumnname[0], "center", self.width_name, valueGetter=headercolumnname[0], imageGetter=ImageIndex, maximumWidth=self.width_name)) temp.append( ColumnDefn(headercolumnname[1], "center", self.width, valueGetter="sp", maximumWidth=self.width, checkStateGetter="state1")) temp.append( ColumnDefn(headercolumnname[3], "center", self.width, valueGetter="dwp", maximumWidth=self.width, checkStateGetter="state2")) self.list.SetColumns(temp) def on_fill_list(self): a = P4Rm() self.Freeze() list_temp = [] roundval = 3 if a.AllDataDict['model'] == 2: for i in range(7): name = asym_pv[i] val_sp = str(round(a.ParamDict['sp'][i], roundval)) val_dwp = str(round(a.ParamDict['dwp'][i], roundval)) check_sp = a.ParamDict['state_sp'][i] check_dwp = a.ParamDict['state_dwp'][i] list_temp.append( CoefListData(name, val_sp, check_sp, val_dwp, check_dwp)) else: len_sp = len(a.ParamDict['sp']) len_dwp = len(a.ParamDict['dwp']) if len_sp > len_dwp: num = len_sp else: num = len_dwp for i in range(num): if i < len_sp: val_sp = str(round(a.ParamDict['sp'][i], roundval)) check_sp = a.ParamDict['state_sp'][i] else: val_sp = "" check_sp = True if i < len_dwp: val_dwp = str(round(a.ParamDict['dwp'][i], roundval)) check_dwp = a.ParamDict['state_dwp'][i] else: val_dwp = "" check_dwp = True list_temp.append( CoefListData(i + 1, val_sp, check_sp, val_dwp, check_dwp)) self.list.SetObjects(list_temp) self.Thaw() def update_param_dict(self, currentline, currentCol, val): if currentCol == 1: P4Rm.ParamDict['sp'][currentline] = float(val) if currentCol == 2: P4Rm.ParamDict['dwp'][currentline] = float(val) self.read_and_update() def read_and_update(self): pub.sendMessage(pubsub_update_sp_dwp_eta) b = Calcul4Radmax() b.on_update() def OnItemSelected(self, event): if 'phoenix' in wx.PlatformInfo: currentline = event.Index else: currentline = event.m_itemIndex currentCol = self.GetOLVColClicked(event) if currentline == -1: self.Freeze() if currentCol == 1 or currentCol == 2: if self.col2checkstatus[currentCol] == 0: val = False self.col2checkstatus[currentCol] = 1 else: val = True self.col2checkstatus[currentCol] = 0 objects = self.list.GetObjects() if currentCol == 1: for obj in objects: obj.state1 = val elif currentCol == 2: for obj in objects: obj.state2 = val self.list.SetObjects(objects) self.list.RefreshObject(objects) self.Thaw() if currentCol == 1 or currentCol == 2: a = P4Rm() objects = self.list.GetObjects() len_sp = len(a.ParamDict['sp']) len_dwp = len(a.ParamDict['dwp']) check_sp = [] check_dwp = [] i = 0 for obj in objects: if i < len_sp: check_sp.append(obj.state1) if i < len_dwp: check_dwp.append(obj.state2) i += 1 P4Rm.ParamDict['state_sp'] = check_sp P4Rm.ParamDict['state_dwp'] = check_dwp def GetOLVColClicked(self, event): """ [email protected] 2011-01 Jan-13 For use with a 3rd party module named ObjectListView used with wxPython. """ spt = wx.GetMousePosition() fpt = self.list.ScreenToClient(spt) x, y = fpt last_col = 0 for col in range(self.list.GetColumnCount()): col_width = self.list.GetColumnWidth(col) left_pxl_col = last_col right_pxl_col = last_col + col_width - 1 if left_pxl_col <= x <= right_pxl_col: col_selected = col break col_selected = None last_col = last_col + col_width return col_selected def OnSize(self, event): sizet = event.GetSize() print("%s, %s" % (sizet.width, sizet.height)) event.Skip()
class TruckDetailView(wx.Panel): """ This will be second component where a selected truck's details are displayed along with buttons to sell/rent the truck and to make any other edits. """ def __init__(self, parent): wx.Panel.__init__(self, parent=parent) self.selected_truck = None selected_truck_buyer_label = wx.StaticText(self, wx.ID_ANY, "Buyer") self.selected_truck_buyer = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY) selected_truck_vin_label = wx.StaticText(self, wx.ID_ANY, "VIN") self.selected_truck_vin = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY) selected_truck_description_label = wx.StaticText( self, wx.ID_ANY, "Description") self.selected_truck_description = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY) selected_truck_sale_price_label = wx.StaticText( self, wx.ID_ANY, "Sale Price") self.selected_truck_sale_price = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY) selected_truck_tax_label = wx.StaticText(self, wx.ID_ANY, "Total Taxes") self.selected_truck_tax = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY) selected_truck_interest_label = wx.StaticText(self, wx.ID_ANY, "Interest") self.selected_truck_interest = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY) selected_truck_total_price_label = wx.StaticText( self, wx.ID_ANY, "Total Price") self.selected_truck_total_price = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY) selected_truck_down_payment_label = wx.StaticText( self, wx.ID_ANY, "Down Payment") self.selected_truck_down_payment = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY) selected_truck_amount_remaining_label = wx.StaticText( self, wx.ID_ANY, "Amount Remaining") self.selected_truck_amount_remaining = wx.TextCtrl( self, wx.ID_ANY, "", style=wx.TE_READONLY) selected_truck_payments_label = wx.StaticText(self, wx.ID_ANY, "Payments made") self.selected_truck_payments = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY) selected_truck_next_payment_label = wx.StaticText( self, wx.ID_ANY, "Next Payment") self.selected_truck_next_payment = wx.TextCtrl(self, wx.ID_ANY, "", style=wx.TE_READONLY) new_truck_btn = wx.Button(self, wx.ID_ANY, 'New Truck') rent_truck_btn = wx.Button(self, wx.ID_ANY, 'Rent Truck') finance_truck_btn = wx.Button(self, wx.ID_ANY, 'Finance Truck') new_truck_btn.SetBackgroundColour(wx.Colour(153, 255, 220)) rent_truck_btn.SetBackgroundColour(wx.Colour(153, 255, 220)) finance_truck_btn.SetBackgroundColour(wx.Colour(153, 255, 220)) print_payments_btn = wx.Button(self, wx.ID_ANY, 'Print Payments') edit_buyer_btn = wx.Button(self, wx.ID_ANY, 'Edit Buyer') choose_buyer_btn = wx.Button(self, wx.ID_ANY, 'Choose Buyer') buyback_btn = wx.Button(self, wx.ID_ANY, 'Buyback') print_payments_btn.SetBackgroundColour(wx.Colour(180, 255, 153)) edit_buyer_btn.SetBackgroundColour(wx.Colour(180, 255, 153)) choose_buyer_btn.SetBackgroundColour(wx.Colour(180, 255, 153)) buyback_btn.SetBackgroundColour(wx.Colour(180, 255, 153)) delete_buyer_btn = wx.Button(self, wx.ID_ANY, 'Delete Buyer') delete_truck_btn = wx.Button(self, wx.ID_ANY, 'Delete Truck') delete_buyer_btn.SetBackgroundColour(wx.Colour(255, 153, 153)) delete_truck_btn.SetBackgroundColour(wx.Colour(255, 153, 153)) selected_truck_sizer = wx.BoxSizer(wx.VERTICAL) selected_truck_text_sizer_one = wx.BoxSizer(wx.HORIZONTAL) selected_truck_text_sizer_two = wx.BoxSizer(wx.HORIZONTAL) selected_truck_text_sizer_three = wx.BoxSizer(wx.HORIZONTAL) selected_truck_btn_sizer = wx.BoxSizer(wx.HORIZONTAL) selected_truck_text_sizer_one.Add(selected_truck_buyer_label, 0, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_one.Add(self.selected_truck_buyer, 2, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_one.Add(selected_truck_vin_label, 0, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_one.Add(self.selected_truck_vin, 1, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_one.Add(selected_truck_description_label, 0, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_one.Add(self.selected_truck_description, 4, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_two.Add(selected_truck_sale_price_label, 0, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_two.Add(self.selected_truck_sale_price, 2, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_two.Add(selected_truck_tax_label, 0, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_two.Add(self.selected_truck_tax, 2, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_two.Add(selected_truck_interest_label, 0, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_two.Add(self.selected_truck_interest, 2, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_two.Add(selected_truck_total_price_label, 0, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_two.Add(self.selected_truck_total_price, 1, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_three.Add(selected_truck_down_payment_label, 0, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_three.Add(self.selected_truck_down_payment, 1, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_three.Add( selected_truck_amount_remaining_label, 0, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_three.Add( self.selected_truck_amount_remaining, 1, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_three.Add(selected_truck_payments_label, 0, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_three.Add(self.selected_truck_payments, 1, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_three.Add(selected_truck_next_payment_label, 0, wx.ALL | wx.EXPAND, 4) selected_truck_text_sizer_three.Add(self.selected_truck_next_payment, 2, wx.ALL | wx.EXPAND, 4) selected_truck_btn_sizer.Add(new_truck_btn, 1, wx.ALL | wx.EXPAND) selected_truck_btn_sizer.Add(rent_truck_btn, 1, wx.ALL | wx.EXPAND) selected_truck_btn_sizer.Add(finance_truck_btn, 1, wx.ALL | wx.EXPAND) selected_truck_btn_sizer.Add(print_payments_btn, 1, wx.ALL | wx.EXPAND) selected_truck_btn_sizer.Add(edit_buyer_btn, 1, wx.ALL | wx.EXPAND) selected_truck_btn_sizer.Add(choose_buyer_btn, 1, wx.ALL | wx.EXPAND) selected_truck_btn_sizer.Add(buyback_btn, 1, wx.ALL | wx.EXPAND) selected_truck_btn_sizer.Add(delete_buyer_btn, 1, wx.ALL | wx.EXPAND) selected_truck_btn_sizer.Add(delete_truck_btn, 1, wx.ALL | wx.EXPAND) selected_truck_sizer.Add(selected_truck_text_sizer_one) selected_truck_sizer.Add(selected_truck_text_sizer_two) selected_truck_sizer.Add(selected_truck_text_sizer_three) selected_truck_sizer.Add(selected_truck_btn_sizer) self.paymentsOlv = Olv(self, wx.ID_ANY, style=wx.LC_REPORT) late_icon = wx.Bitmap("data/Late.png", wx.BITMAP_TYPE_ANY) self.late_icon = self.paymentsOlv.AddImages(wx.Icon(late_icon)) self.paymentsOlv.SetColumns([ ColumnDefn("Date", "left", 120, "due_date", stringConverter=date_str, imageGetter=self.image_getter), ColumnDefn("Description", "left", 200, "description"), ColumnDefn("Balance", "left", 120, "balance_before", stringConverter=numbers_with_commas), ColumnDefn("Payment", "left", 120, "payment_amount", stringConverter=numbers_with_commas), ColumnDefn("New Balance", "left", 120, "new_balance", stringConverter=numbers_with_commas), ColumnDefn("Received", "left", 90, "is_confirmed", stringConverter=confirm_status, valueSetter=self.confirm_payment), ColumnDefn("Payment Date", "left", 150, "payment_date", stringConverter=date_str) ]) self.paymentsOlv.cellEditMode = Olv.CELLEDIT_SINGLECLICK sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(selected_truck_sizer, 1, wx.ALL | wx.EXPAND, 5) sizer.Add(self.paymentsOlv, 5, wx.ALL | wx.EXPAND, 5) self.SetSizer(sizer) def set_truck(self, truck): self.selected_truck = truck self.selected_truck_vin.SetValue(truck.vin_number) self.selected_truck_description.SetValue(truck.description) if truck.current_buyer is not None: self.selected_truck_buyer.SetValue(truck.current_buyer.name) self.selected_truck_sale_price.SetValue( numbers_with_commas(truck.current_buyer.sale_price)) self.selected_truck_tax.SetValue( numbers_with_commas(truck.current_buyer.tax)) self.selected_truck_interest.SetValue( numbers_with_commas(truck.current_buyer.interest)) self.selected_truck_total_price.SetValue( numbers_with_commas(truck.current_buyer.get_total_price())) self.selected_truck_down_payment.SetValue( numbers_with_commas(truck.current_buyer.down_payment)) self.selected_truck_amount_remaining.SetValue( numbers_with_commas(truck.current_buyer.amount_remaining)) self.selected_truck_payments.SetValue( str(truck.current_buyer.get_payments_made())) self.selected_truck_next_payment.SetValue( str(date_str(truck.current_buyer.next_payment_date))) self.paymentsOlv.SetObjects(truck.current_buyer.payment_list) if truck.current_buyer is None: self.paymentsOlv.SetObjects([]) def clear_truck(self): self.selected_truck = None self.selected_truck_vin.Clear() self.selected_truck_description.Clear() self.selected_truck_buyer.Clear() self.selected_truck_sale_price.Clear() self.selected_truck_tax.Clear() self.selected_truck_interest.Clear() self.selected_truck_total_price.Clear() self.selected_truck_down_payment.Clear() self.selected_truck_amount_remaining.Clear() self.selected_truck_payments.Clear() self.selected_truck_next_payment.Clear() def confirm_payment(self, payment, value): payment.is_confirmed = value if payment.is_confirmed: payment.payment_date = date.today() buyer = self.selected_truck.current_buyer if buyer.sale_type == Truck.RENTED: if value is True and payment.due_date == buyer.next_payment_date: buyer.generate_payment_rent() elif buyer.sale_type == Truck.FINANCED: pass buyer.refresh_values() def image_getter(self, payment): if payment.is_late(): return self.late_icon
class MyFrame(wx.Frame): def __init__(self, *args, **kwds): wx.Frame.__init__(self, *args, **kwds) self.Init() def Init(self): self.InitModel() self.InitWidgets() self.InitObjectListView() def InitModel(self): self.listOfDictionaries = [ { "title": "Shiver", "artist": "Natalie Imbruglia", "album": "Counting Down the Days" }, { "title": "Who's Gonna Ride Your Wild Horses", "artist": "U2", "album": "Achtung Baby" }, { "title": "So Cruel", "artist": "U2", "album": "Achtung Baby" }, { "title": "The Fly", "artist": "U2", "album": "Achtung Baby" }, { "title": "Fight For All The Wrong Reason", "artist": "Nickelback", "album": "All The Right Reasons" }, { "title": "Photograph", "artist": "Nickelback", "album": "All The Right Reasons" }, { "title": "Animals", "artist": "Nickelback", "album": "All The Right Reasons" }, { "title": "Savin' Me", "artist": "Nickelback", "album": "All The Right Reasons" }, { "title": "Far Away", "artist": "Nickelback", "album": "All The Right Reasons" }, { "title": "Next Contestant", "artist": "Nickelback", "album": "All The Right Reasons" }, { "title": "My Girl", "artist": "Hoodoo Gurus", "album": "Ampology" }, { "title": "Be My Guru", "artist": "Hoodoo Gurus", "album": "Ampology" }, { "title": "I Want You Back", "artist": "Hoodoo Gurus", "album": "Ampology" }, { "title": "Dare you to move", "artist": "Switchfoot", "album": "The Beautiful Letdown" }, { "title": "Redemption", "artist": "Switchfoot", "album": "The Beautiful Letdown" }, { "title": "The beautiful letdown", "artist": "Switchfoot", "album": "The Beautiful Letdown" }, ] def InitWidgets(self): panel = wx.Panel(self, -1) sizer_1 = wx.BoxSizer(wx.VERTICAL) sizer_1.Add(panel, 1, wx.ALL | wx.EXPAND) self.SetSizer(sizer_1) self.myOlv = ObjectListView(panel, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER) sizer_2 = wx.BoxSizer(wx.VERTICAL) sizer_2.Add(self.myOlv, 1, wx.ALL | wx.EXPAND, 4) panel.SetSizer(sizer_2) self.Layout() def InitObjectListView(self): groupImage = self.myOlv.AddImages(ExampleImages.getGroup16Bitmap(), ExampleImages.getGroup32Bitmap()) userImage = self.myOlv.AddImages(ExampleImages.getUser16Bitmap(), ExampleImages.getUser32Bitmap()) musicImage = self.myOlv.AddImages(ExampleImages.getMusic16Bitmap(), ExampleImages.getMusic32Bitmap()) soloArtists = [ "Nelly Furtado", "Missy Higgins", "Moby", "Natalie Imbruglia" ] def artistImageGetter(track): if track["artist"] in soloArtists: return userImage else: return groupImage self.myOlv.SetColumns([ ColumnDefn("Title", "left", -1, "title", imageGetter=musicImage), ColumnDefn("Artist", "left", -1, "artist", imageGetter=artistImageGetter), ColumnDefn("Album", "center", -1, "album") ]) self.myOlv.SetObjects(self.listOfDictionaries)