我正在使用 GridTableBase 类来显示我的数据框。出于某种原因,网格在第一列中显示了我的 Pandas 索引,我不知道为什么。我试过了if col ==0
,没有任何改变。有人有解释吗?
class DataTable(gridlib.GridTableBase):
def __init__(self, data):
gridlib.GridTableBase.__init__(self)
self.data = data
#Store the row and col length to see if table has changed in size
self._rows = self.GetNumberRows()
self._cols = self.GetNumberCols()
self.odd=gridlib.GridCellAttr()
self.odd.SetBackgroundColour((217,217,217))
self.even=gridlib.GridCellAttr()
self.even.SetBackgroundColour((255,255,255))
print(print(len(self.data.columns)))
def GetAttr(self, row, col, kind):
attr = [self.even, self.odd][row % 2]
attr.IncRef()
return attr
def GetNumberRows(self):
return len(self.data)
def GetNumberCols(self):
return len(self.data.columns) + 1
def IsEmptyCell(self, row, col):
return False
def GetValue(self, row, col):
if col == 0:
pass
# return None #self.data.index[row]
else:
return self.data.iloc[row, col-1]
def SetValue(self, row, col, value):
if col == 0:
pass
else:
self.data.iloc[row, col - 1] = value
def GetColLabelValue(self, col):
try:
if col == 0:
return ""
#return 'Index' if self.data.index.name is None else self.data.index.name
else:
return self.data.columns[col - 1] #[col-1]
except:
pass
#---------------------------------------------------------------------------
class DataGrid(gridlib.Grid):
def __init__(self, parent, data): # data
gridlib.Grid.__init__(self, parent, - 1) #,colnames,-1 # data
self.table = DataTable(data)
# The second parameter means that the grid is to take ownership of the
# table and will destroy it when done. Otherwise you would need to keep
# a reference to it and call it's Destroy method later.
self.SetTable(self.table, True)
self.Bind(gridlib.EVT_GRID_CELL_RIGHT_CLICK, self.OnCellRightClick)
#self.data_grid.Bind(wx.grid.EVT_GRID_CELL_CHANGED, self.onCellChanged)
#self.data_grid.Bind(wx.grid.EVT_GRID_CELL_RIGHT_DCLICK,self.onDeleteRecord)
#self.data_grid.Bind(gridlib.EVT_GRID_CELL_RIGHT_CLICK,self.showPopupMenu)
#self.data_grid.CreateGrid(rows,cols) #self.data_grid.CreateGrid(219, 16)
我试着用以下方法删除它:
self.grid.DeleteCols(0,1)
但我也做不到。它抛出一个异常。
"C++ 断言 ""Assert failure"" 在 wxGridTableBase::DeleteCols() 中 ....\src\generic\grid.cpp(1471) 失败:调用了网格表类函数 DeleteCols,但您的派生表类不会覆盖此函数"