I want to set GridCellAttr to cell that have already set GridCellAttr by GetAttr().
But SetAttr() don’t override GridCellAttr that set GetAttr() in Grid.
I think I should change GridCellAttr.
Please advise me.
import wx
import wx.grid
class GenericTable(wx.grid.PyGridTableBase):
def init(self, data, rowLabels=None, colLabels=None):
wx.grid.PyGridTableBase.init(self)
self.data = data
self.rowLabels = rowLabels
self.colLabels = colLabels
self.font_attr = wx.grid.GridCellAttr()
self.font_attr.SetFont(wx.Font(13, wx.DEFAULT, wx.NORMAL, wx.LIGHT, encoding=wx.FONTENCODING_SYSTEM))
def GetNumberRows(self):
return len(self.data)
def GetNumberCols(self):
return len(self.data[0])
def GetColLabelValue(self, col):
if self.colLabels:
return self.colLabels[col]
def GetRowLabelValue(self, row):
if self.rowLabels:
return self.rowLabels[row]
def IsEmptyCell(self, row, col):
return False
def GetValue(self, row, col):
return self.data[row][col]
def GetAttr(self, row, col, kind):
attr = self.font_attr
attr.IncRef()
return attr
def SetValue(self, row, col, value):
pass
data = ((“A”, “B”),
(“C”, “D”),
(“E”, “F”))
colLabels = (“Last”, “First”)
rowLabels = (“1”, “2”, “3”)
class SimpleGrid(wx.grid.Grid):
def init(self, parent):
wx.grid.Grid.init(self, parent, -1)
self.tableBase = GenericTable(data, rowLabels, colLabels)
self.Bind(wx.grid.EVT_GRID_SELECT_CELL, self.on_selected_cell)
self.SetTable(self.tableBase)
def on_selected_cell(self, event):
selected_row = event.GetRow()
selected_col = event.GetCol()
attr = wx.grid.GridCellAttr()
attr.SetBackgroundColour(“blue”) # not change color, I want to change color
attr.IncRef()
self.tableBase.SetAttr(attr, selected_row, selected_col) # not override
event.Skip()
class TestFrame(wx.Frame):
def init(self, parent):
wx.Frame.init(self, parent, -1, “A Grid”, size=(275, 275))
SimpleGrid(self)
app = wx.PySimpleApp()
frame = TestFrame(None)
frame.Show(True)
app.MainLoop()