1

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」に基づいて常に並べ替えられることです。

何か案は?

編集:

dict の例を 2 つ示します。

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 つの列を簡単に正しく並べ替えることができます (たとえば、列 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は適切に更新されます(結果を印刷しました)-並べ替えは行われません。「ソート」値が「保存/更新」されている場所が完全にはわからないと思いますか?

4

1 に答える 1