-from wxPython.wx import *
-from wxPython.grid import *
-from wxPython.lib.mixins.grid import wxGridAutoEditMixin
+# 11/6/2003 - Jeff Grimmett (grimmtooth@softhome.net)
+#
+# o Updated for V2.5
+# o The mixin features were all commented out. Is it broke? Should it even
+# be in the source? Or is it left as an exercise to the reader?
+#
+# 11/25/2003 - Jeff Grimmett (grimmtooth@softhome.net)
+#
+# o Robin confirms, this is tutorial code. But be warned! It has not been
+# converted OR tested!
+#
+
+import wx
+import wx.grid as gridlib
+#import wx.lib.mixins.grid as mixins
#---------------------------------------------------------------------------
-class SimpleGrid(wxGrid): ##, wxGridAutoEditMixin):
+class SimpleGrid(gridlib.Grid): ##, mixins.GridAutoEditMixin):
def __init__(self, parent, log):
- wxGrid.__init__(self, parent, -1)
- ##wxGridAutoEditMixin.__init__(self)
+ gridlib.Grid.__init__(self, parent, -1)
+ ##mixins.GridAutoEditMixin.__init__(self)
self.log = log
self.moveTo = None
- EVT_IDLE(self, self.OnIdle)
+ self.Bind(wx.EVT_IDLE, self.OnIdle)
- self.CreateGrid(25, 25)
- ##self.EnableEditing(false)
+ self.CreateGrid(25, 25) #, wxGrid.wxGridSelectRows)
+ ##self.EnableEditing(False)
# simple cell formatting
self.SetColSize(3, 200)
self.SetCellValue(1, 1, "Another cell")
self.SetCellValue(2, 2, "Yet another cell")
self.SetCellValue(3, 3, "This cell is read-only")
- self.SetCellFont(0, 0, wxFont(12, wxROMAN, wxITALIC, wxNORMAL))
- self.SetCellTextColour(1, 1, wxRED)
- self.SetCellBackgroundColour(2, 2, wxCYAN)
- self.SetReadOnly(3, 3, true)
+ self.SetCellFont(0, 0, wx.Font(12, wx.ROMAN, wx.ITALIC, wx.NORMAL))
+ self.SetCellTextColour(1, 1, wx.RED)
+ self.SetCellBackgroundColour(2, 2, wx.CYAN)
+ self.SetReadOnly(3, 3, True)
- self.SetCellEditor(5, 0, wxGridCellNumberEditor())
+ self.SetCellEditor(5, 0, gridlib.GridCellNumberEditor(1,1000))
self.SetCellValue(5, 0, "123")
- self.SetCellEditor(6, 0, wxGridCellFloatEditor())
+ self.SetCellEditor(6, 0, gridlib.GridCellFloatEditor())
self.SetCellValue(6, 0, "123.34")
+ self.SetCellEditor(7, 0, gridlib.GridCellNumberEditor())
+
+ self.SetCellValue(6, 3, "You can veto editing this cell")
+
+ #self.SetRowLabelSize(0)
+ #self.SetColLabelSize(0)
# attribute objects let you keep a set of formatting values
# in one spot, and reuse them if needed
- attr = wxGridCellAttr()
- attr.SetTextColour(wxBLACK)
- attr.SetBackgroundColour(wxRED)
- attr.SetFont(wxFont(10, wxSWISS, wxNORMAL, wxBOLD))
+ attr = gridlib.GridCellAttr()
+ attr.SetTextColour(wx.BLACK)
+ attr.SetBackgroundColour(wx.RED)
+ attr.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))
# you can set cell attributes for the whole row (or column)
self.SetRowAttr(5, attr)
self.SetColLabelValue(1, "column")
self.SetColLabelValue(2, "labels")
- self.SetColLabelAlignment(wxALIGN_LEFT, wxALIGN_BOTTOM)
+ self.SetColLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_BOTTOM)
+
+ #self.SetDefaultCellOverflow(False)
+ #r = wxGridCellAutoWrapStringRenderer()
+ #self.SetCellRenderer(9, 1, r)
+
+ # overflow cells
+ self.SetCellValue( 9, 1, "This default cell will overflow into neighboring cells, but not if you turn overflow off.");
+ self.SetCellSize(11, 1, 3, 3);
+ self.SetCellAlignment(11, 1, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE);
+ self.SetCellValue(11, 1, "This cell is set to span 3 rows and 3 columns");
- # test all the events
- EVT_GRID_CELL_LEFT_CLICK(self, self.OnCellLeftClick)
- EVT_GRID_CELL_RIGHT_CLICK(self, self.OnCellRightClick)
- EVT_GRID_CELL_LEFT_DCLICK(self, self.OnCellLeftDClick)
- EVT_GRID_CELL_RIGHT_DCLICK(self, self.OnCellRightDClick)
- EVT_GRID_LABEL_LEFT_CLICK(self, self.OnLabelLeftClick)
- EVT_GRID_LABEL_RIGHT_CLICK(self, self.OnLabelRightClick)
- EVT_GRID_LABEL_LEFT_DCLICK(self, self.OnLabelLeftDClick)
- EVT_GRID_LABEL_RIGHT_DCLICK(self, self.OnLabelRightDClick)
+ editor = gridlib.GridCellTextEditor()
+ editor.SetParameters('10')
+ self.SetCellEditor(0, 4, editor)
+ self.SetCellValue(0, 4, "Limited text")
- EVT_GRID_ROW_SIZE(self, self.OnRowSize)
- EVT_GRID_COL_SIZE(self, self.OnColSize)
- EVT_GRID_RANGE_SELECT(self, self.OnRangeSelect)
- EVT_GRID_CELL_CHANGE(self, self.OnCellChange)
- EVT_GRID_SELECT_CELL(self, self.OnSelectCell)
+ # test all the events
+ self.Bind(gridlib.EVT_GRID_CELL_LEFT_CLICK, self.OnCellLeftClick)
+ self.Bind(gridlib.EVT_GRID_CELL_RIGHT_CLICK, self.OnCellRightClick)
+ self.Bind(gridlib.EVT_GRID_CELL_LEFT_DCLICK, self.OnCellLeftDClick)
+ self.Bind(gridlib.EVT_GRID_CELL_RIGHT_DCLICK, self.OnCellRightDClick)
+
+ self.Bind(gridlib.EVT_GRID_LABEL_LEFT_CLICK, self.OnLabelLeftClick)
+ self.Bind(gridlib.EVT_GRID_LABEL_RIGHT_CLICK, self.OnLabelRightClick)
+ self.Bind(gridlib.EVT_GRID_LABEL_LEFT_DCLICK, self.OnLabelLeftDClick)
+ self.Bind(gridlib.EVT_GRID_LABEL_RIGHT_DCLICK, self.OnLabelRightDClick)
+
+ self.Bind(gridlib.EVT_GRID_ROW_SIZE, self.OnRowSize)
+ self.Bind(gridlib.EVT_GRID_COL_SIZE, self.OnColSize)
- EVT_GRID_EDITOR_SHOWN(self, self.OnEditorShown)
- EVT_GRID_EDITOR_HIDDEN(self, self.OnEditorHidden)
- EVT_GRID_EDITOR_CREATED(self, self.OnEditorCreated)
+ self.Bind(gridlib.EVT_GRID_RANGE_SELECT, self.OnRangeSelect)
+ self.Bind(gridlib.EVT_GRID_CELL_CHANGE, self.OnCellChange)
+ self.Bind(gridlib.EVT_GRID_SELECT_CELL, self.OnSelectCell)
+ self.Bind(gridlib.EVT_GRID_EDITOR_SHOWN, self.OnEditorShown)
+ self.Bind(gridlib.EVT_GRID_EDITOR_HIDDEN, self.OnEditorHidden)
+ self.Bind(gridlib.EVT_GRID_EDITOR_CREATED, self.OnEditorCreated)
def OnCellLeftClick(self, evt):
(evt.GetRow(), evt.GetCol(), evt.GetPosition()))
evt.Skip()
-
def OnRowSize(self, evt):
self.log.write("OnRowSize: row %d, %s\n" %
(evt.GetRowOrCol(), evt.GetPosition()))
# Show how to stay in a cell that has bad data. We can't just
# call SetGridCursor here since we are nested inside one so it
- # won't have any effect. Instead, set coordinants to move to in
+ # won't have any effect. Instead, set coordinates to move to in
# idle time.
value = self.GetCellValue(evt.GetRow(), evt.GetCol())
+
if value == 'no good':
self.moveTo = evt.GetRow(), evt.GetCol()
if self.moveTo != None:
self.SetGridCursor(self.moveTo[0], self.moveTo[1])
self.moveTo = None
+
evt.Skip()
# Another way to stay in a cell that has a bad value...
row = self.GetGridCursorRow()
col = self.GetGridCursorCol()
+
if self.IsCellEditControlEnabled():
self.HideCellEditControl()
self.DisableCellEditControl()
+
value = self.GetCellValue(row, col)
+
if value == 'no good 2':
return # cancels the cell selection
+
evt.Skip()
def OnEditorShown(self, evt):
+ if evt.GetRow() == 6 and evt.GetCol() == 3 and \
+ wx.MessageBox("Are you sure you wish to edit this cell?",
+ "Checking", wx.YES_NO) == wx.NO:
+ evt.Veto()
+ return
+
self.log.write("OnEditorShown: (%d,%d) %s\n" %
(evt.GetRow(), evt.GetCol(), evt.GetPosition()))
evt.Skip()
+
def OnEditorHidden(self, evt):
+ if evt.GetRow() == 6 and evt.GetCol() == 3 and \
+ wx.MessageBox("Are you sure you wish to finish editing this cell?",
+ "Checking", wx.YES_NO) == wx.NO:
+ evt.Veto()
+ return
+
self.log.write("OnEditorHidden: (%d,%d) %s\n" %
(evt.GetRow(), evt.GetCol(), evt.GetPosition()))
evt.Skip()
+
def OnEditorCreated(self, evt):
self.log.write("OnEditorCreated: (%d, %d) %s\n" %
(evt.GetRow(), evt.GetCol(), evt.GetControl()))
#---------------------------------------------------------------------------
-class TestFrame(wxFrame):
+class TestFrame(wx.Frame):
def __init__(self, parent, log):
- wxFrame.__init__(self, parent, -1, "Simple Grid Demo", size=(640,480))
+ wx.Frame.__init__(self, parent, -1, "Simple Grid Demo", size=(640,480))
grid = SimpleGrid(self, log)
if __name__ == '__main__':
import sys
- app = wxPySimpleApp()
+ app = wx.PySimpleApp()
frame = TestFrame(None, sys.stdout)
- frame.Show(true)
+ frame.Show(True)
app.MainLoop()