挿入、追加、削除をサポートするPyGridTableサブクラス
。 , 。 wxPython , , , 。
2つ目の方法について議論します.どのように実現するかの詳細については、ここでは説明しません(ネット上には多くの例があります).主な手順を簡単に説明します.
メッシュがCreateGrid()メソッドを使用して初期化されている場合、メッシュのInsertRows、DeleteRowsなどのメソッドは常に動作し、新しい行または列に作成されたセルは空の文字列で初期値になります.ネットワークがSetTable()メソッドを使用して初期化されている場合、グリッド・テーブルはテーブルの変更をサポートする必要があります.変更をサポートするには、グリッド・テーブル(PyGridTableのサブクラス)が同じ変更方法を上書きします.たとえば、グリッドに対してInsertCols()メソッドを呼び出した場合、グリッド・テーブルもInsertCols(pos=0、numCols=1)メソッドを宣言する必要があります.グリッド・テーブルのこのメソッドは、ブール値Trueを返して変更をサポートし、Falseを返すと変更を拒否します.
InsertRows , “self.data” (list), , :
""""""for num in range(0,numRows): newData={}; newData[u'lable'] = u'' self.data.insert(pos,newData) gridView = self.GetView() gridView.BeginBatch() insertMsg = wx.grid.GridTableMessage(self,wx.grid.GRIDTABLE_NOTIFY_ROWS_INSERTED,pos,numRows) gridView.ProcessTableMessage(insertMsg) gridView.EndBatch() getValueMsg = wx.grid.GridTableMessage(self,wx.grid.GRIDTABLE_REQUEST_VIEW_GET_VALUES) gridView.ProcessTableMessage(getValueMsg) return True
def AppendRows(self,numRows=1): """""" for num in range(0,numRows): newData={}; newData[u'lable'] = u'' self.data.append(newData) self.isModified = True gridView = self.GetView() gridView.BeginBatch() appendMsg = wx.grid.GridTableMessage(self,wx.grid.GRIDTABLE_NOTIFY_ROWS_APPENDED,numRows) gridView.ProcessTableMessage(appendMsg) gridView.EndBatch() getValueMsg = wx.grid.GridTableMessage(self,wx.grid.GRIDTABLE_REQUEST_VIEW_GET_VALUES) gridView.ProcessTableMessage(getValueMsg) if self.onGridValueChanged: self.onGridValueChanged() return True def DeleteRows(self,pos=0,numRows=1): if self.data is None or len(self.data) == 0: return False for rowNum in range(0,numRows): self.data.remove(self.data[pos+rowNum]) gridView = self.GetView() gridView.BeginBatch() deleteMsg = wx.grid.GridTableMessage(self,wx.grid.GRIDTABLE_NOTIFY_ROWS_DELETED,pos,numRows) gridView.ProcessTableMessage(deleteMsg) gridView.EndBatch() getValueMsg = wx.grid.GridTableMessage(self,wx.grid.GRIDTABLE_REQUEST_VIEW_GET_VALUES) gridView.ProcessTableMessage(getValueMsg) if self.onGridValueChanged: self.onGridValueChanged() return True
あるいは、ここから比較的完全なコードをダウンロードすることもできます(一部のコードは載せられないので、少し修正しました.使用や参考に影響しないはずです):
http://download.csdn.net/detail/ryanzll/4512964