Возможно, вы запрашиваете что-то вроде этого:
class MyList(ULC.UltimateListCtrl, listmix.ColumnSorterMixin):
def __init__(self, parent, data):
ULC.UltimateListCtrl.__init__(self, parent, agwStyle=ULC.ULC_REPORT | ULC.ULC_HAS_VARIABLE_ROW_HEIGHT)
self.data = data
self.IDoMyself()
self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColumn)
def IDoMyself(self):
self.itemDataMap = self.data
listmix.ColumnSorterMixin.__init__(self, len(self.data))
self.InsertColumn(0, "A") # you should generalize this for any size
self.InsertColumn(1, "B")
self.InsertColumn(2, "C")
for key, data in self.data.items():
index = self.Append(data)
self.SetItemData(index, key)
def OnColumn(self, e):
self.Refresh()
e.Skip()
def GetListCtrl(self):
return self
Обратите внимание, что вам также следует автоматизировать процесс InsertColumn, чтобы программно учитывать количество столбцов.Если вам не нужны специальные имена столбцов, и вы должны использовать только несколько, вы можете использовать string.ascii_uppercase, чтобы получить букву для каждого столбца.
Затем вы создаете экземпляр класса в вашем фрейме:
class MainWindow(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
DATA = { 0 : ("3", "3", "1"), 1 : ("2", "1", "2"), 2 : ("1", "2", "3") }
self.list = MyList(self, DATA)
self.Show()
Я поместил здесь DATA, но немного изменив код, его можно было бы отправить извне с помощью вызова типа MainWindow (self, DATA).