Форум сайта python.su
есть проблема в том, что грид не хочет менять количество строк. т.е. первый раз он выставляет нужное количество строк, а потом не меняет.
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()
Офлайн
Ну сколько уже можно! :) ну учитесь уже поиском пользоваться!
я уже давно приводил пример http://python.com.ua/forum/viewtopic.php?pid=9242#p9242
Офлайн
PooH
на самом деле я смотрел ваш пример, вот только сразу не заметил нужную мне вещь :) извеняюсь, спасибо что тыкнули )) помогло!
Офлайн
PooH к сожалению Ваша ссылка наверно устарела, как пример и не знаю
очень много устаревшего кода в инете , а примера, именно по изменению размера сетки созданной как SetTable, не могу найти сам ни как не соображу…
Может быть кто поможет ссылкой или примером?
Офлайн
dimitТы прочитал страницу про wxGrid?
а примера, именно по изменению размера сетки созданной как SetTable, не могу найти
Note: you can only call SetTable once for any given wxGrid. Because of this, it is generally necessary to have your wxPyGridTableBase class alter the grid's size and shape to reflect any changes in your table's dimensions. See wxGrid Size/Shape Management below for details.
Отредактировано py.user.next (Дек. 13, 2022 00:18:06)
Офлайн
py.user.next спасибо за ссылку, немного стало понятнее.
ещё скачал демо wxpython, нашёл там рабочий пример почти со всеми функциями Grid_MegaExample.py.
всё это продвинет работу значительно.
Офлайн