3 import  wx
.grid             
as  gridlib
 
   4 #import  wx.lib.mixins.grid  as  mixins 
   6 #--------------------------------------------------------------------------- 
   8 class SimpleGrid(gridlib
.Grid
): ##, mixins.GridAutoEditMixin): 
   9     def __init__(self
, parent
, log
): 
  10         gridlib
.Grid
.__init
__(self
, parent
, -1) 
  11         ##mixins.GridAutoEditMixin.__init__(self) 
  15         self
.Bind(wx
.EVT_IDLE
, self
.OnIdle
) 
  17         self
.CreateGrid(25, 25) #, wxGrid.wxGridSelectRows) 
  18         ##self.EnableEditing(False) 
  20         # simple cell formatting 
  21         self
.SetColSize(3, 200) 
  22         self
.SetRowSize(4, 45) 
  23         self
.SetCellValue(0, 0, "First cell") 
  24         self
.SetCellValue(1, 1, "Another cell") 
  25         self
.SetCellValue(2, 2, "Yet another cell") 
  26         self
.SetCellValue(3, 3, "This cell is read-only") 
  27         self
.SetCellFont(0, 0, wx
.Font(12, wx
.ROMAN
, wx
.ITALIC
, wx
.NORMAL
)) 
  28         self
.SetCellTextColour(1, 1, wx
.RED
) 
  29         self
.SetCellBackgroundColour(2, 2, wx
.CYAN
) 
  30         self
.SetReadOnly(3, 3, True) 
  32         self
.SetCellEditor(5, 0, gridlib
.GridCellNumberEditor(1,1000)) 
  33         self
.SetCellValue(5, 0, "123") 
  34         self
.SetCellEditor(6, 0, gridlib
.GridCellFloatEditor()) 
  35         self
.SetCellValue(6, 0, "123.34") 
  36         self
.SetCellEditor(7, 0, gridlib
.GridCellNumberEditor()) 
  38         self
.SetCellValue(6, 3, "You can veto editing this cell") 
  40         #self.SetRowLabelSize(0) 
  41         #self.SetColLabelSize(0) 
  43         # attribute objects let you keep a set of formatting values 
  44         # in one spot, and reuse them if needed 
  45         attr 
= gridlib
.GridCellAttr() 
  46         attr
.SetTextColour(wx
.BLACK
) 
  47         attr
.SetBackgroundColour(wx
.RED
) 
  48         attr
.SetFont(wx
.Font(10, wx
.SWISS
, wx
.NORMAL
, wx
.BOLD
)) 
  50         # you can set cell attributes for the whole row (or column) 
  51         self
.SetRowAttr(5, attr
) 
  53         self
.SetColLabelValue(0, "Custom") 
  54         self
.SetColLabelValue(1, "column") 
  55         self
.SetColLabelValue(2, "labels") 
  57         self
.SetColLabelAlignment(wx
.ALIGN_LEFT
, wx
.ALIGN_BOTTOM
) 
  59         #self.SetDefaultCellOverflow(False) 
  60         #r = wxGridCellAutoWrapStringRenderer() 
  61         #self.SetCellRenderer(9, 1, r) 
  64         self
.SetCellValue( 9, 1, "This default cell will overflow into neighboring cells, but not if you turn overflow off."); 
  65         self
.SetCellSize(11, 1, 3, 3); 
  66         self
.SetCellAlignment(11, 1, wx
.ALIGN_CENTRE
, wx
.ALIGN_CENTRE
); 
  67         self
.SetCellValue(11, 1, "This cell is set to span 3 rows and 3 columns"); 
  70         editor 
= gridlib
.GridCellTextEditor() 
  71         editor
.SetParameters('10') 
  72         self
.SetCellEditor(0, 4, editor
) 
  73         self
.SetCellValue(0, 4, "Limited text") 
  77         self
.Bind(gridlib
.EVT_GRID_CELL_LEFT_CLICK
, self
.OnCellLeftClick
) 
  78         self
.Bind(gridlib
.EVT_GRID_CELL_RIGHT_CLICK
, self
.OnCellRightClick
) 
  79         self
.Bind(gridlib
.EVT_GRID_CELL_LEFT_DCLICK
, self
.OnCellLeftDClick
) 
  80         self
.Bind(gridlib
.EVT_GRID_CELL_RIGHT_DCLICK
, self
.OnCellRightDClick
) 
  82         self
.Bind(gridlib
.EVT_GRID_LABEL_LEFT_CLICK
, self
.OnLabelLeftClick
) 
  83         self
.Bind(gridlib
.EVT_GRID_LABEL_RIGHT_CLICK
, self
.OnLabelRightClick
) 
  84         self
.Bind(gridlib
.EVT_GRID_LABEL_LEFT_DCLICK
, self
.OnLabelLeftDClick
) 
  85         self
.Bind(gridlib
.EVT_GRID_LABEL_RIGHT_DCLICK
, self
.OnLabelRightDClick
) 
  87         self
.Bind(gridlib
.EVT_GRID_ROW_SIZE
, self
.OnRowSize
) 
  88         self
.Bind(gridlib
.EVT_GRID_COL_SIZE
, self
.OnColSize
) 
  90         self
.Bind(gridlib
.EVT_GRID_RANGE_SELECT
, self
.OnRangeSelect
) 
  91         self
.Bind(gridlib
.EVT_GRID_CELL_CHANGE
, self
.OnCellChange
) 
  92         self
.Bind(gridlib
.EVT_GRID_SELECT_CELL
, self
.OnSelectCell
) 
  94         self
.Bind(gridlib
.EVT_GRID_EDITOR_SHOWN
, self
.OnEditorShown
) 
  95         self
.Bind(gridlib
.EVT_GRID_EDITOR_HIDDEN
, self
.OnEditorHidden
) 
  96         self
.Bind(gridlib
.EVT_GRID_EDITOR_CREATED
, self
.OnEditorCreated
) 
  99     def OnCellLeftClick(self
, evt
): 
 100         self
.log
.write("OnCellLeftClick: (%d,%d) %s\n" % 
 101                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 104     def OnCellRightClick(self
, evt
): 
 105         self
.log
.write("OnCellRightClick: (%d,%d) %s\n" % 
 106                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 109     def OnCellLeftDClick(self
, evt
): 
 110         self
.log
.write("OnCellLeftDClick: (%d,%d) %s\n" % 
 111                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 114     def OnCellRightDClick(self
, evt
): 
 115         self
.log
.write("OnCellRightDClick: (%d,%d) %s\n" % 
 116                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 119     def OnLabelLeftClick(self
, evt
): 
 120         self
.log
.write("OnLabelLeftClick: (%d,%d) %s\n" % 
 121                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 124     def OnLabelRightClick(self
, evt
): 
 125         self
.log
.write("OnLabelRightClick: (%d,%d) %s\n" % 
 126                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 129     def OnLabelLeftDClick(self
, evt
): 
 130         self
.log
.write("OnLabelLeftDClick: (%d,%d) %s\n" % 
 131                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 134     def OnLabelRightDClick(self
, evt
): 
 135         self
.log
.write("OnLabelRightDClick: (%d,%d) %s\n" % 
 136                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 139     def OnRowSize(self
, evt
): 
 140         self
.log
.write("OnRowSize: row %d, %s\n" % 
 141                        (evt
.GetRowOrCol(), evt
.GetPosition())) 
 144     def OnColSize(self
, evt
): 
 145         self
.log
.write("OnColSize: col %d, %s\n" % 
 146                        (evt
.GetRowOrCol(), evt
.GetPosition())) 
 149     def OnRangeSelect(self
, evt
): 
 151             self
.log
.write("OnRangeSelect: top-left %s, bottom-right %s\n" % 
 152                            (evt
.GetTopLeftCoords(), evt
.GetBottomRightCoords())) 
 156     def OnCellChange(self
, evt
): 
 157         self
.log
.write("OnCellChange: (%d,%d) %s\n" % 
 158                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 160         # Show how to stay in a cell that has bad data.  We can't just 
 161         # call SetGridCursor here since we are nested inside one so it 
 162         # won't have any effect.  Instead, set coordinates to move to in 
 164         value 
= self
.GetCellValue(evt
.GetRow(), evt
.GetCol()) 
 166         if value 
== 'no good': 
 167             self
.moveTo 
= evt
.GetRow(), evt
.GetCol() 
 170     def OnIdle(self
, evt
): 
 171         if self
.moveTo 
!= None: 
 172             self
.SetGridCursor(self
.moveTo
[0], self
.moveTo
[1]) 
 178     def OnSelectCell(self
, evt
): 
 179         self
.log
.write("OnSelectCell: (%d,%d) %s\n" % 
 180                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 182         # Another way to stay in a cell that has a bad value... 
 183         row 
= self
.GetGridCursorRow() 
 184         col 
= self
.GetGridCursorCol() 
 186         if self
.IsCellEditControlEnabled(): 
 187             self
.HideCellEditControl() 
 188             self
.DisableCellEditControl() 
 190         value 
= self
.GetCellValue(row
, col
) 
 192         if value 
== 'no good 2': 
 193             return  # cancels the cell selection 
 198     def OnEditorShown(self
, evt
): 
 199         if evt
.GetRow() == 6 and evt
.GetCol() == 3 and \
 
 200            wx
.MessageBox("Are you sure you wish to edit this cell?", 
 201                         "Checking", wx
.YES_NO
) == wx
.NO
: 
 205         self
.log
.write("OnEditorShown: (%d,%d) %s\n" % 
 206                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 210     def OnEditorHidden(self
, evt
): 
 211         if evt
.GetRow() == 6 and evt
.GetCol() == 3 and \
 
 212            wx
.MessageBox("Are you sure you wish to  finish editing this cell?", 
 213                         "Checking", wx
.YES_NO
) == wx
.NO
: 
 217         self
.log
.write("OnEditorHidden: (%d,%d) %s\n" % 
 218                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 222     def OnEditorCreated(self
, evt
): 
 223         self
.log
.write("OnEditorCreated: (%d, %d) %s\n" % 
 224                        (evt
.GetRow(), evt
.GetCol(), evt
.GetControl())) 
 228 #--------------------------------------------------------------------------- 
 230 class TestFrame(wx
.Frame
): 
 231     def __init__(self
, parent
, log
): 
 232         wx
.Frame
.__init
__(self
, parent
, -1, "Simple Grid Demo", size
=(640,480)) 
 233         grid 
= SimpleGrid(self
, log
) 
 237 #--------------------------------------------------------------------------- 
 239 if __name__ 
== '__main__': 
 241     app 
= wx
.PySimpleApp() 
 242     frame 
= TestFrame(None, sys
.stdout
) 
 247 #---------------------------------------------------------------------------