挿入、追加、削除をサポートするPyGridTableサブクラス


                  。             ,                    。 wxPython ,                    ,            ,               。

  
  
  
  
  • メッシュコントロールは、各行および各列の値を直接処理します.
  • のデータは、1つのグリッドテーブル(grid table)を用いることにより、
  • を間接的に処理することができる.
    2つ目の方法について議論します.どのように実現するかの詳細については、ここでは説明しません(ネット上には多くの例があります).主な手順を簡単に説明します.
  • wxを作成する.grid.PyGridTableの子クラスで、親クラスを上書きする方法があります.
  • は、上述したサブクラスおよびGridを、SetTable法によってバインドする.

  • メッシュがCreateGrid()メソッドを使用して初期化されている場合、メッシュのInsertRows、DeleteRowsなどのメソッドは常に動作し、新しい行または列に作成されたセルは空の文字列で初期値になります.ネットワークがSetTable()メソッドを使用して初期化されている場合、グリッド・テーブルはテーブルの変更をサポートする必要があります.変更をサポートするには、グリッド・テーブル(PyGridTableのサブクラス)が同じ変更方法を上書きします.たとえば、グリッドに対してInsertCols()メソッドを呼び出した場合、グリッド・テーブルもInsertCols(pos=0、numCols=1)メソッドを宣言する必要があります.グリッド・テーブルのこのメソッドは、ブール値Trueを返して変更をサポートし、Falseを返すと変更を拒否します.
         InsertRows    ,  “self.data”   (list),          ,      :
    
        
        
        
        
  • 要素(すなわちnewData)を追加し、その内容が空に割り当てられ、データ変数(すなわちself.data)
  • に追加する.
  • は、挿入メッセージ(GRIDTABLE_NOTIFY_ROWS_INSERTED)を作成し、値を付与する.グリッドに新しいデータ挿入(mfcのpostmessageやsendmessageのような)があることを通知するための
  • は、グリッドクエリを通知し、新しいデータを表示するクエリメッセージ(GRIDTABLE_REQUEST_VIEW_GET_VALUES)を作成する.
  • def InsertRows(self,pos=1,numRows=1):
    """"""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