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)#, gridlib.Grid.SelectRows) 
  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 = gridlib.GridCellAutoWrapStringRenderer() 
  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") 
  75         renderer 
= gridlib
.GridCellAutoWrapStringRenderer() 
  76         self
.SetCellRenderer(15,0, renderer
) 
  77         self
.SetCellValue(15,0, "The text in this cell will be rendered with word-wrapping") 
  81         self
.Bind(gridlib
.EVT_GRID_CELL_LEFT_CLICK
, self
.OnCellLeftClick
) 
  82         self
.Bind(gridlib
.EVT_GRID_CELL_RIGHT_CLICK
, self
.OnCellRightClick
) 
  83         self
.Bind(gridlib
.EVT_GRID_CELL_LEFT_DCLICK
, self
.OnCellLeftDClick
) 
  84         self
.Bind(gridlib
.EVT_GRID_CELL_RIGHT_DCLICK
, self
.OnCellRightDClick
) 
  86         self
.Bind(gridlib
.EVT_GRID_LABEL_LEFT_CLICK
, self
.OnLabelLeftClick
) 
  87         self
.Bind(gridlib
.EVT_GRID_LABEL_RIGHT_CLICK
, self
.OnLabelRightClick
) 
  88         self
.Bind(gridlib
.EVT_GRID_LABEL_LEFT_DCLICK
, self
.OnLabelLeftDClick
) 
  89         self
.Bind(gridlib
.EVT_GRID_LABEL_RIGHT_DCLICK
, self
.OnLabelRightDClick
) 
  91         self
.Bind(gridlib
.EVT_GRID_ROW_SIZE
, self
.OnRowSize
) 
  92         self
.Bind(gridlib
.EVT_GRID_COL_SIZE
, self
.OnColSize
) 
  94         self
.Bind(gridlib
.EVT_GRID_RANGE_SELECT
, self
.OnRangeSelect
) 
  95         self
.Bind(gridlib
.EVT_GRID_CELL_CHANGE
, self
.OnCellChange
) 
  96         self
.Bind(gridlib
.EVT_GRID_SELECT_CELL
, self
.OnSelectCell
) 
  98         self
.Bind(gridlib
.EVT_GRID_EDITOR_SHOWN
, self
.OnEditorShown
) 
  99         self
.Bind(gridlib
.EVT_GRID_EDITOR_HIDDEN
, self
.OnEditorHidden
) 
 100         self
.Bind(gridlib
.EVT_GRID_EDITOR_CREATED
, self
.OnEditorCreated
) 
 103     def OnCellLeftClick(self
, evt
): 
 104         self
.log
.write("OnCellLeftClick: (%d,%d) %s\n" % 
 105                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 108     def OnCellRightClick(self
, evt
): 
 109         self
.log
.write("OnCellRightClick: (%d,%d) %s\n" % 
 110                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 113     def OnCellLeftDClick(self
, evt
): 
 114         self
.log
.write("OnCellLeftDClick: (%d,%d) %s\n" % 
 115                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 118     def OnCellRightDClick(self
, evt
): 
 119         self
.log
.write("OnCellRightDClick: (%d,%d) %s\n" % 
 120                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 123     def OnLabelLeftClick(self
, evt
): 
 124         self
.log
.write("OnLabelLeftClick: (%d,%d) %s\n" % 
 125                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 128     def OnLabelRightClick(self
, evt
): 
 129         self
.log
.write("OnLabelRightClick: (%d,%d) %s\n" % 
 130                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 133     def OnLabelLeftDClick(self
, evt
): 
 134         self
.log
.write("OnLabelLeftDClick: (%d,%d) %s\n" % 
 135                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 138     def OnLabelRightDClick(self
, evt
): 
 139         self
.log
.write("OnLabelRightDClick: (%d,%d) %s\n" % 
 140                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 143     def OnRowSize(self
, evt
): 
 144         self
.log
.write("OnRowSize: row %d, %s\n" % 
 145                        (evt
.GetRowOrCol(), evt
.GetPosition())) 
 148     def OnColSize(self
, evt
): 
 149         self
.log
.write("OnColSize: col %d, %s\n" % 
 150                        (evt
.GetRowOrCol(), evt
.GetPosition())) 
 153     def OnRangeSelect(self
, evt
): 
 155             self
.log
.write("OnRangeSelect: top-left %s, bottom-right %s\n" % 
 156                            (evt
.GetTopLeftCoords(), evt
.GetBottomRightCoords())) 
 160     def OnCellChange(self
, evt
): 
 161         self
.log
.write("OnCellChange: (%d,%d) %s\n" % 
 162                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 164         # Show how to stay in a cell that has bad data.  We can't just 
 165         # call SetGridCursor here since we are nested inside one so it 
 166         # won't have any effect.  Instead, set coordinates to move to in 
 168         value 
= self
.GetCellValue(evt
.GetRow(), evt
.GetCol()) 
 170         if value 
== 'no good': 
 171             self
.moveTo 
= evt
.GetRow(), evt
.GetCol() 
 174     def OnIdle(self
, evt
): 
 175         if self
.moveTo 
!= None: 
 176             self
.SetGridCursor(self
.moveTo
[0], self
.moveTo
[1]) 
 182     def OnSelectCell(self
, evt
): 
 183         self
.log
.write("OnSelectCell: (%d,%d) %s\n" % 
 184                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 186         # Another way to stay in a cell that has a bad value... 
 187         row 
= self
.GetGridCursorRow() 
 188         col 
= self
.GetGridCursorCol() 
 190         if self
.IsCellEditControlEnabled(): 
 191             self
.HideCellEditControl() 
 192             self
.DisableCellEditControl() 
 194         value 
= self
.GetCellValue(row
, col
) 
 196         if value 
== 'no good 2': 
 197             return  # cancels the cell selection 
 202     def OnEditorShown(self
, evt
): 
 203         if evt
.GetRow() == 6 and evt
.GetCol() == 3 and \
 
 204            wx
.MessageBox("Are you sure you wish to edit this cell?", 
 205                         "Checking", wx
.YES_NO
) == wx
.NO
: 
 209         self
.log
.write("OnEditorShown: (%d,%d) %s\n" % 
 210                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 214     def OnEditorHidden(self
, evt
): 
 215         if evt
.GetRow() == 6 and evt
.GetCol() == 3 and \
 
 216            wx
.MessageBox("Are you sure you wish to  finish editing this cell?", 
 217                         "Checking", wx
.YES_NO
) == wx
.NO
: 
 221         self
.log
.write("OnEditorHidden: (%d,%d) %s\n" % 
 222                        (evt
.GetRow(), evt
.GetCol(), evt
.GetPosition())) 
 226     def OnEditorCreated(self
, evt
): 
 227         self
.log
.write("OnEditorCreated: (%d, %d) %s\n" % 
 228                        (evt
.GetRow(), evt
.GetCol(), evt
.GetControl())) 
 232 #--------------------------------------------------------------------------- 
 234 class TestFrame(wx
.Frame
): 
 235     def __init__(self
, parent
, log
): 
 236         wx
.Frame
.__init
__(self
, parent
, -1, "Simple Grid Demo", size
=(640,480)) 
 237         self
.grid 
= SimpleGrid(self
, log
) 
 241 #--------------------------------------------------------------------------- 
 243 if __name__ 
== '__main__': 
 245     from wx
.lib
.mixins
.inspection 
import InspectableApp
 
 246     app 
= InspectableApp(False) 
 247     frame 
= TestFrame(None, sys
.stdout
) 
 250     #shell = wx.py.shell.ShellFrame(frame, locals={'wx':wx, 'frame':frame}) 
 255 #---------------------------------------------------------------------------