wx.grid.GridTableBase.SetAttr don't override wx.grid.GridTableBase.GetAttr

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()

Hi. I’m questioner.

Maybe its questuon is hard to read, I’m sorry.

I want to know how to update GridCellAttr that have already set.

2015年10月2日金曜日 17時32分23秒 UTC+9 hudif:

···

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()