PyGridTableBase меняет количество строк, но сама сетка не хочет их видеть. видимо нужно как-то принудительно грид обновить, но я не нашел как. пробовал update, но не помогло.
кто нить с таким сталкивался?
# -*- coding:cp1251 -*- import wx import wx.grid class ShtrafTable(wx.grid.PyGridTableBase): def __init__(self, header,data): wx.grid.PyGridTableBase.__init__(self) self.data = data self.header= header def GetNumberRows(self): return len(self.data) def GetNumberCols(self): return len(self.header) def IsEmptyCell(self, row, col): if row < len(self.data): return False else: return True def GetValue(self, row, col): if row < len(self.data): return str( self.data[row][col+1]) else: return '' def GetColLabelValue(self,col): if col <= len(self.header): return self.header[col] else : return 'Не определено' def ReSet(self,data): self.data=data self.GetNumberRows() def GetData(self): return self.data class ShtrafTableGrid(wx.grid.Grid): def __init__(self, parent, header,data): wx.grid.Grid.__init__(self, parent, -1) self.table = ShtrafTable(header,data) self.parent=parent self.SetTable(self.table, True) self.DisableCellEditControl() self.EnableEditing(False) self.HideCellEditControl() def DeleteRows(self,pos,numRows): pass def AppendRows(self,pos,numRows): pass def ReSet(self,data): self.ClearSelection() # Очистить выбор. self.table.ReSet(data) self.DeleteRows(0,self.GetNumberRows()) self.AppendRows(0,len(data)) self.ForceRefresh() def GetData(self): return self.table.GetData() class TestFrame(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent, -1, "Test", size=(500, 400)) self.panel = wx.Panel(self) sizer = wx.BoxSizer(wx.VERTICAL) self.bp = wx.Panel(self.panel) self.but = wx.Button(self.bp, -1, label='Update') wx.EVT_BUTTON(self, self.but.GetId(), self.OnUpdate) sizer.Add(self.bp, proportion=0, flag=wx.EXPAND|wx.ALL, border=5) data = ( (0,'dfg-1','dfg-2','dgdg-3'), (0,'dfg-1','dfg-2','dgdg-3'), (0,'dfg-1','dfg-2','dgdg-3'), (0,'dfg-1','dfg-2','dgdg-3'), (0,'dfg-1','dfg-2','dgdg-3'), (0,'dfg-1','dfg-2','dgdg-3'), ) self.grid = ShtrafTableGrid(self.panel, ['столбец1','столбец2','столбец3'], data) sizer.Add(self.grid, proportion=1, flag=wx.EXPAND|wx.ALL, border=5) self.panel.SetSizer(sizer) def OnUpdate(self, evt): data = ( (0,'dfg-1','dfg-2','dgdg-3'), (0,'dfg-1','dfg-2','dgdg-3'), ) self.grid.ReSet(data) if __name__ == '__main__': app = wx.PySimpleApp() frame = TestFrame(None) frame.Show(True) app.MainLoop()