2012-01-04 25 views
0

我該如何允許一個UltimateListCtrl,以便能夠重新排序/重新排列用戶輸入自身?下面顯示的能力,但我不知道如何做到這一點。 DATA = {「3」,「3」,「1」), 1 :(「2」,「1」,「2」), 2 :(「1」,「2」 「3」) }如何讓UltimateListCtrl自行重新排列,wxpython

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() 
+0

'下面顯示的能力,但我不知道它是如何完成的。你可以重述一下你的問題嗎?我無法理解問題是什麼。就我所見,您的代碼完美無瑕。什麼'重新排序/用用戶輸入重新排列'意味着什麼?顯示您對給定條目的期望。 – joaquin 2012-01-04 08:41:46

回答

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 

注意你也應該自動化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在這裏,但修改代碼一點它可以從外部發送與像主窗口的調用(個體經營,DATA)。

+0

我試過了這段代碼,但是當用戶嘗試重新排列它時,沒有任何反應。 (通過將元素拖到新位置) – thelost 2012-01-04 20:22:32