Newbie with problem. I'm trying to build a multicolumn list control with wxPython and am having difficulty getting the data from my query into each column. I'm getting the following error:
Traceback (most recent call last): File "/home/mb/PyPrograms/EMRGUI/Selectable.py", line 115, in <module> Repository(None, -1, 'Repository') File "/home/mb/PyPrograms/EMRGUI/Selectable.py", line 57, in __init__ index = self.list.InsertStringItem(sys.maxint, i['patient_ID']) File "/usr/lib/python2.5/site-packages/wx-2.8-gtk2-unicode/wx/lib/ mixins/listctrl.py", line 751, in __InsertStringItem_ index = self.InsertImageStringItem(index, label, 0) File "/usr/lib/python2.5/site-packages/wx-2.8-gtk2-unicode/wx/ _controls.py", line 4716, in InsertImageStringItem return _controls_.ListCtrl_InsertImageStringItem(*args, **kwargs) TypeError: String or Unicode type required The code I'm using is based on the wxPython tutorial at Zetcode: #!/usr/bin/python import wx import sys import MySQLdb from wx.lib.mixins.listctrl import CheckListCtrlMixin, ListCtrlAutoWidthMixin conn = MySQLdb.connect(host = "localhost", user = "root", passwd = "Barron85", db = "meds") def name_find(namefrag): cursor = conn.cursor(MySQLdb.cursors.DictCursor) cursor.execute("SELECT patient_ID, firstname, lastname, phonenumber, SSN, \ DOB FROM demographics WHERE lastname LIKE '%s%%'" % (namefrag)) results = cursor.fetchall() results_list = list(results) return results_list cursor.close() class CheckListCtrl(wx.ListCtrl, CheckListCtrlMixin, ListCtrlAutoWidthMixin): def __init__(self, parent): wx.ListCtrl.__init__(self, parent, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER) CheckListCtrlMixin.__init__(self) ListCtrlAutoWidthMixin.__init__(self) class Repository(wx.Frame): def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title, size=(850, 400)) panel = wx.Panel(self, -1) vbox = wx.BoxSizer(wx.VERTICAL) hbox = wx.BoxSizer(wx.HORIZONTAL) leftPanel = wx.Panel(panel, -1) rightPanel = wx.Panel(panel, -1) self.log = wx.TextCtrl(rightPanel, -1, style=wx.TE_MULTILINE) self.list = CheckListCtrl(rightPanel) self.list.InsertColumn(0, 'Patient ID', width=100) self.list.InsertColumn(1, 'Lastname', width=200) self.list.InsertColumn(2, 'Firstname', width=125) self.list.InsertColumn(3, 'Phone') self.list.InsertColumn(4, 'SSN') self.list.InsertColumn(5, 'DOB') patients = name_find(str(raw_input('Select the first several letters of the last name: '))) for i in patients: index = self.list.InsertStringItem(sys.maxint, i['patient_ID']) self.list.SetStringItem(index, 1, i['lastname']) self.list.SetStringItem(index, 2, i['firstname']) self.list.SetStringItem(index, 3, i['phonenumber']) self.list.SetStringItem(index, 4, i['SSN']) self.list.SetStringItem(index, 5, i['DOB']) vbox2 = wx.BoxSizer(wx.VERTICAL) sel = wx.Button(leftPanel, -1, 'Select All', size=(100, -1)) des = wx.Button(leftPanel, -1, 'Deselect All', size=(100, -1)) apply = wx.Button(leftPanel, -1, 'Apply', size=(100, -1)) self.Bind(wx.EVT_BUTTON, self.OnSelectAll, id=sel.GetId()) self.Bind(wx.EVT_BUTTON, self.OnDeselectAll, id=des.GetId()) self.Bind(wx.EVT_BUTTON, self.OnApply, id=apply.GetId()) vbox2.Add(sel, 0, wx.TOP, 5) vbox2.Add(des) vbox2.Add(apply) leftPanel.SetSizer(vbox2) vbox.Add(self.list, 1, wx.EXPAND | wx.TOP, 3) vbox.Add((-1, 10)) vbox.Add(self.log, 0.5, wx.EXPAND) vbox.Add((-1, 10)) rightPanel.SetSizer(vbox) hbox.Add(leftPanel, 0, wx.EXPAND | wx.RIGHT, 5) hbox.Add(rightPanel, 1, wx.EXPAND) hbox.Add((3, -1)) panel.SetSizer(hbox) self.Centre() self.Show(True) def OnSelectAll(self, event): num = self.list.GetItemCount() for i in range(num): self.list.CheckItem(i) def OnDeselectAll(self, event): num = self.list.GetItemCount() for i in range(num): self.list.CheckItem(i, False) def OnApply(self, event): num = self.list.GetItemCount() for i in range(num): if i == 0: self.log.Clear() if self.list.IsChecked(i): self.log.AppendText(self.list.GetItemText(i) + '\n') app = wx.App() Repository(None, -1, 'Repository') app.MainLoop() If you see what I'm doing wrong I'd be grateful for any help. Mike -- http://mail.python.org/mailman/listinfo/python-list