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