from wxPython.wx import *
from wxPython.grid import *
+from wxPython.lib.mixins.grid import wxGridAutoEditMixin
#---------------------------------------------------------------------------
-class SimpleGrid(wxGrid):
+class SimpleGrid(wxGrid): ##, wxGridAutoEditMixin):
def __init__(self, parent, log):
wxGrid.__init__(self, parent, -1)
+ ##wxGridAutoEditMixin.__init__(self)
self.log = log
+ self.moveTo = None
+
+ EVT_IDLE(self, self.OnIdle)
self.CreateGrid(25, 25)
self.SetCellValue(0, 0, "First cell")
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.SetCellEditor(5, 0, wxGridCellNumberEditor())
+ self.SetCellValue(5, 0, "123")
+ self.SetCellEditor(6, 0, wxGridCellFloatEditor())
+ self.SetCellValue(6, 0, "123.34")
# attribute objects let you keep a set of formatting values
# in one spot, and reuse them if needed
self.SetColLabelValue(1, "column")
self.SetColLabelValue(2, "labels")
+ self.SetColLabelAlignment(wxALIGN_LEFT, wxALIGN_BOTTOM)
+
# test all the events
EVT_GRID_CELL_LEFT_CLICK(self, self.OnCellLeftClick)
EVT_GRID_CELL_RIGHT_CLICK(self, self.OnCellRightClick)
EVT_GRID_EDITOR_SHOWN(self, self.OnEditorShown)
EVT_GRID_EDITOR_HIDDEN(self, self.OnEditorHidden)
+ EVT_GRID_EDITOR_CREATED(self, self.OnEditorCreated)
+
def OnCellLeftClick(self, evt):
(evt.GetTopLeftCoords(), evt.GetBottomRightCoords()))
evt.Skip()
+
def OnCellChange(self, evt):
self.log.write("OnCellChange: (%d,%d) %s\n" %
(evt.GetRow(), evt.GetCol(), 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
+ # 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):
self.log.write("OnSelectCell: (%d,%d) %s\n" %
(evt.GetRow(), evt.GetCol(), evt.GetPosition()))
+
+ # 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):
self.log.write("OnEditorShown: (%d,%d) %s\n" %
(evt.GetRow(), evt.GetCol(), evt.GetPosition()))
(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):
def __init__(self, parent, log):
wxFrame.__init__(self, parent, -1, "Simple Grid Demo", size=(640,480))
- grid = SimpleGrid(self, log)
+ self.grid = grid = SimpleGrid(self, log)
+
+ self.mainmenu = wxMenuBar()
+
+ menu = wxMenu()
+
+ mID = NewId()
+ menu.Append(mID, 'Preview Grid', 'Print Displayed Grid')
+ EVT_MENU(self, mID, self.OnPreviewGrid)
+ self.mainmenu.Append(menu, '&Print')
+
+ self.SetMenuBar(self.mainmenu)
+
+ def OnPreviewGrid(self, event):
+ from wxPython.lib.printout import PrintGrid
+ grid = self.grid
+ total_col = 4 # not all columns to be used for printing
+ total_row = 4
+
+ format = [1, 1.5, 2.5, 4, 5, 7] # column spacing
+
+ # class to print and preview
+ prt = PrintGrid(self, grid, format, total_col, total_row )
+ prt.SetAttributes() # get the colour and text attributes
+
+ table = prt.GetTable() # the table print control class
+ table.SetHeader("Simple Grid Test Header")
+ table.SetFooter()
+
+ prt.Preview() # preview the table
#---------------------------------------------------------------------------
#---------------------------------------------------------------------------
+
+