-from wxPython.wx import *
-from wxPython.grid import *
+
+import wx
+import wx.grid as gridlib
+#import wx.lib.mixins.grid as mixins
#---------------------------------------------------------------------------
-class SimpleGrid(wxGrid):
+class SimpleGrid(gridlib.Grid): ##, mixins.GridAutoEditMixin):
def __init__(self, parent, log):
- wxGrid.__init__(self, parent, -1)
+ 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.CreateGrid(25, 25) #, wxGrid.wxGridSelectRows)
+ ##self.EnableEditing(False)
# simple cell formatting
self.SetColSize(3, 200)
self.SetCellValue(0, 0, "First cell")
self.SetCellValue(1, 1, "Another cell")
self.SetCellValue(2, 2, "Yet another cell")
- self.SetCellFont(0, 0, wxFont(12, wxROMAN, wxITALIC, wxNORMAL))
- self.SetCellTextColour(1, 1, wxRED)
- self.SetCellBackgroundColour(2, 2, wxCYAN)
+ self.SetCellValue(3, 3, "This cell is read-only")
+ 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, gridlib.GridCellNumberEditor(1,1000))
+ self.SetCellValue(5, 0, "123")
+ 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");
+
+
+ editor = gridlib.GridCellTextEditor()
+ editor.SetParameters('10')
+ self.SetCellEditor(0, 4, editor)
+ self.SetCellValue(0, 4, "Limited text")
+
# 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)
+ 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)
- 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)
+ 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)
- EVT_GRID_ROW_SIZE(self, self.OnRowSize)
- EVT_GRID_COL_SIZE(self, self.OnColSize)
+ self.Bind(gridlib.EVT_GRID_ROW_SIZE, self.OnRowSize)
+ self.Bind(gridlib.EVT_GRID_COL_SIZE, self.OnColSize)
- EVT_GRID_RANGE_SELECT(self, self.OnRangeSelect)
- EVT_GRID_CELL_CHANGE(self, self.OnCellChange)
- EVT_GRID_SELECT_CELL(self, self.OnSelectCell)
+ 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)
- EVT_GRID_EDITOR_SHOWN(self, self.OnEditorShown)
- EVT_GRID_EDITOR_HIDDEN(self, self.OnEditorHidden)
+ 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()
+
def OnIdle(self, evt):
if self.moveTo != None:
self.SetGridCursor(self.moveTo[0], self.moveTo[1])
self.moveTo = None
+ evt.Skip()
def OnSelectCell(self, evt):
# 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
- else:
- evt.Skip()
+ 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()