如何让UltimateListCtrl自我重新排列,wxpython
我想知道怎么让一个叫UltimateListCtrl的控件,可以根据用户的输入来重新排序或调整顺序。下面的代码展示了这个功能,但我不太清楚具体该怎么实现。
数据结构如下:
DATA = {
0 : ("3", "3", "1"),
1 : ("2", "1", "2"),
2 : ("1", "2", "3")
}
import wx
import wx.lib.mixins.listctrl as listmix
from wx.lib.agw import ultimatelistctrl as ULC
class MyList(ULC.UltimateListCtrl, listmix.ColumnSorterMixin):
def __init__(self, parent, columns):
ULC.UltimateListCtrl.__init__(self, parent, agwStyle=ULC.ULC_REPORT | ULC.ULC_HAS_VARIABLE_ROW_HEIGHT)
self.itemDataMap = DATA
listmix.ColumnSorterMixin.__init__(self, columns)
self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColumn)
def OnColumn(self, e):
self.Refresh()
e.Skip()
def GetListCtrl(self):
return self
class MainWindow(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.list = MyList(self, 3)
self.list.InsertColumn(0, "A")
self.list.InsertColumn(1, "B")
self.list.InsertColumn(2, "C")
items = DATA.items()
for key, data in items:
index = self.list.Append(data)
self.list.SetItemData(index, key)
self.Show()
app = wx.App(False)
win = MainWindow(None)
app.MainLoop()
1 个回答
0
也许你在问类似这样的内容:
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
注意,你还应该自动化插入列的过程,以便程序能够根据列的数量来处理。如果你不需要特别的列名,而且只用几个列名的话,可以使用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)这样的调用从外部传入数据。