wxpython grid GRIDTABLE_NOTIFY_ROWS_DELETED
Jean Brouwers
mrjean1ATcomcastDOTnet at no.spam.net
Sun Nov 21 13:15:36 EST 2004
Change the message call in RemoveData() to
self.GetView().ProcessTableMessage(wx.grid.GridTableMessage(
self,wx.grid.GRIDTABLE_NOTIFY_ROWS_DELETED, len(data), 1))
The ..._ROW_DELETED message requires two args, the index of the first
row and the number of rows to be removed. Similarly for colums.
/Jean Brouwers
ProphICy Semiconductor, Inc.
PS) Also, check the DoUpdate() method in this example
<http://www.bitpim.org/pyxr/c/projects/bitpim/bpmedia.py.html>
In article <39cbe663.0411210343.6a1de0ed at posting.google.com>, Piet
<pit.grinja at gmx.de> wrote:
> Hello,
> I have written a small program which dynamically displays data from a
> data structure in a wx.grid. The grid reacts as expected when the data
> structure is enlarged: a new row is added and filled with data. When
> data is removed, the data is deleted as expected, but instead of being
> removed, a row is being added to the grid. Can anyone explain why?
> Here is sample code to illustrate what I mean.
> Thanks in advance
> Piet
> import wx
> import wx.grid
> #---------------------------------------------------------------------------
>
> class XmlTableModel(wx.grid.PyGridTableBase):
> def __init__(self,headers,data):
> wx.grid.PyGridTableBase.__init__(self)
> self.headers = headers
> self.data = data
>
> def GetNumberRows(self):
> return len(self.data)
>
> def GetNumberCols(self):
> return len(self.headers)
>
> def RemoveData(self,rowNum):
> self.data.pop()
>
> self.GetView().ProcessTableMessage(wx.grid.GridTableMessage(self,wx.grid.GRIDT
> ABLE_NOTIFY_ROWS_DELETED,1))
>
> def AddData(self,data):
> self.data.append(data)
>
> self.GetView().ProcessTableMessage(wx.grid.GridTableMessage(self,wx.grid.GRIDT
> ABLE_NOTIFY_ROWS_APPENDED,1))
>
> def IsEmptyCell(self, row, col):
> try:
> if self.data[row][col] != "":
> return True
> else:
> return False
> except:
> return False
>
> def GetValue(self, row, col):
> return self.data[row][col]
>
> def SetValue(self, row, col, value):
> self.data[row][col] = value
>
> def GetColLabelValue(self, col):
> return self.headers[col]
>
> def GetDefaultColLabelSize(self):
> return 100
>
> def GetRowLabelValue(self, row):
> return self.data[row][0]
> #---------------------------------------------------------------------------
>
> class TestFrame(wx.Frame):
> def __init__(self, parent):
> wx.Frame.__init__(self, parent, -1, "Simple Table Model Demo",
> size=(640,480))
> self.panel = wx.Panel(self, -1, style=0)
> self.grid = wx.grid.Grid(self.panel)
> self.headers = ["Eins","Zwei","Drei","Vier"]
> self.data = [["A1","A2","A3","A4"],
> ["B1","B2","B3","B4"],
> ["C1","C2","C3","C4"],
> ["D1","D2","D3","D4"]]
> self.grid.SetTable(XmlTableModel(self.headers,self.data),
> True)
> self.AddBtn = wx.Button(self.panel, -1, "Add Entry")
> self.AddBtn.SetDefault()
> self.Bind(wx.EVT_BUTTON, self.OnAddEntry, self.AddBtn)
> self.RemoveBtn = wx.Button(self.panel, -1, "Remove Entry")
> self.Bind(wx.EVT_BUTTON, self.OnRemoveEntry, self.RemoveBtn)
> self.bs = wx.BoxSizer(wx.VERTICAL)
> self.bs.Add(self.grid, 1, wx.GROW|wx.ALL, 5)
> self.bs.Add(self.AddBtn)
> self.bs.Add(self.RemoveBtn)
> self.panel.SetSizer(self.bs)
>
> def OnAddEntry(self, evt):
> self.grid.GetTable().AddData(["NA1","NA2","NA3","NA4"])
>
> def OnRemoveEntry(self, evt):
> self.grid.GetTable().RemoveData(0)
>
> #---------------------------------------------------------------------------
>
> if __name__ == '__main__':
> import sys
> app = wx.PySimpleApp()
> frame = TestFrame(None)
> frame.Show(True)
> app.MainLoop()
> #---------------------------------------------------------------------------
More information about the Python-list
mailing list