我試圖構建一個原型應用程序,該應用程序由鏈接到圖表的數據表 組成,該圖表將與表 並排顯示,並隨數據更改而更新。如何在可編輯的ListCtrl和數據源之間同步數據?
對於我使用的ListCtrl派生的對象和表,因爲我想 能夠就地編輯的數據,我也繼承了 TextEditMixin類:
class EditableListCtrl(wx.ListCtrl, listmix.TextEditMixin):
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)
我想讓我的後端數據與其顯示分開,所以我的 wx.Frame
派生對象具有一個數據源對象,從中讀取數據以填充ListCtrl的數據源對象 。
self.list = EditableListCtrl(panel, style=wx.LC_REPORT)
self.list.InsertColumn(0, 'A', width=140)
self.list.InsertColumn(1, 'B', width=130)
for i in range(0, self.db.getNumRecords()):
item = self.db.getRecord(i)
index = self.list.InsertStringItem(sys.maxint, str(item[0]))
self.list.SetStringItem(index, 1, str(item[1]))
因爲我現在基本上是有數據的兩個副本,我想提出 確保無論何時的ListCtrl是 由用戶編輯的數據源更新。
有沒有一個標準的方法來做到這一點?
我試圖綁定到EVT_LIST_ITEM_DESELECTED事件,但它 觸發TextEditMixin功能改變 的的ListCtrl數據之前 - 由回調 功能是舊數據從的ListCtrl檢索的數據。
感謝您的答覆。我並不抱怨有兩份數據。我很驚訝沒有一個事件可以綁定到ListCtrl中的數據發生變化時激活。否則,能夠編輯它有什麼意義?我必須輪詢ListCtrl嗎?我會看看Virtual ListCtrl和ObjectListView,看看它們是否更好。 – MatthewD 2012-02-06 23:11:52
我不知道StackOverflow允許用戶詢問和回答自己的問題,更不用說接受自己的答案。 – 2012-02-08 13:53:15
它的確如此,但你沒有得到任何代表。 – MatthewD 2012-02-08 22:07:04