我正在尝试对 3 列列表中的项目进行排序,但它不太有效。我将其设置为填充“表格”。当我第一次运行程序时,它对列进行排序没有问题。但是,我可以选择另一个数据源,并且同一个表中填充了新数据(主要是第 3 列更改)。但是,现在当我对项目进行排序时,它会根据原始数据而不是新显示的数据进行排序。有什么帮助吗?
我的代码(一些不必要的部分被删除):
class EditADP(wx.Dialog):
def __init__(self, parent, title):
super(EditADP, self).__init__(parent=parent,
title=title, size=(450, 700))
#Sizer Info Here
# This is where user selects new data source
try:
self.selectADP = wx.ComboBox(self,-1,tmp_default_ADP,choices=ADP_Options,style=wx.CB_READONLY)
except:
self.selectADP = wx.ComboBox(self,-1,default_ADP,choices=ADP_Options,style=wx.CB_READONLY)
#More Sizers
self.Bind(wx.EVT_COMBOBOX, self.OnselectADP, self.selectADP)
tmp_ADPselection = default_ADP
global adpdata
adpdata = {}
for i in Master_PlayerID:
adpdata[i] = (Master_1[i],Master_2[i],Master_3[tmp_ADPselection][i],i)
self.ADPlist = EditableListCtrl_editADP(self,-1,style=wx.LC_REPORT)
self.ADPlist.InsertColumn(1,'Col1',format=wx.LIST_FORMAT_CENTRE)
self.ADPlist.InsertColumn(2,'Col2',format=wx.LIST_FORMAT_CENTRE)
self.ADPlist.InsertColumn(3,'Col3',format=wx.LIST_FORMAT_CENTRE)
items = adpdata.items()
index = 0
for key, data in items:
self.ADPlist.InsertStringItem(index, Master_List[data[3]])
self.ADPlist.SetStringItem(index, 1, data[1])
self.ADPlist.SetStringItem(index, 2, str(data[2]))
self.ADPlist.SetItemData(index, key)
index += 1
self.itemDataMap = adpdata
# More sizer and button stuff here
def OnselectADP(self, event):
tmp_ADPselection = ADP_Options[event.GetSelection()]
self.ADPlist.DeleteAllItems()
global adpdata
adpdata = {}
for i in Master_PlayerID:
adpdata[i] = (Master_1[i],Master_2[i],Master_3[tmp_ADPselection][i],i)
items = adpdata.items()
index = 0
for key, data in items:
self.ADPlist.InsertStringItem(index, Master_List[data[3]])
self.ADPlist.SetStringItem(index, 1, data[1])
self.ADPlist.SetStringItem(index, 2, str(data[2]))
self.ADPlist.SetItemData(index, key)
index += 1
self.itemDataMap = adpdata
class EditableListCtrl_editADP(wx.ListCtrl, listmix.TextEditMixin, listmix.ColumnSorterMixin):
def __init__(self, parent, ID=wx.ID_ANY, pos=wx.DefaultPosition,
size=wx.DefaultSize, style=0):
wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
listmix.TextEditMixin.__init__(self)
listmix.ColumnSorterMixin.__init__(self, len(adpdata))
self.itemDataMap = adpdata
def GetListCtrl(self):
return self
同样,3 列“表”会适当地更新数据,因此那里没有问题。唯一的问题是当我尝试对列进行排序时,它总是根据用于填写表格的原始“adpdata”对其进行排序。
有任何想法吗?
编辑:
这是两个示例字典:
Selection_A = {1:[A, no, 1],2:[B,no,2],3:[C,yes,3],4:[D,yes,4],5:[E,no,5]}
Selection_B = {1:[A, no, 3],2:[B,no,5],3:[C,yes,1],4:[D,yes,2],5:[E,no,4]}
Selection_A 是我使用的默认字典。当我构建列表时,我可以轻松地对三列进行正确排序(比如第 3 列将按 1、2、3、4、5 的顺序显示。但是,当我切换到 Selection_B 时,它仍然根据 Selection_A 值排序(但列表显示 Selection_B 值)- 例如,它显示第 3 列的 3、5、1、2、4 和第 1 列的 A、B、C、D、E 排序(应该是 1、2、3、4、5 和C,D,A,E,B)。我不知道这是否有帮助?我无法显示我的原始字典,因为数据太多。
另外,我确实检查了——我的 self.itemDataMap 确实更新了(我打印了结果)——排序只是没有发生。我想我不完全确定“排序”值在哪里“存储/更新”?