Added the sample code from wxPython In Action to the samples dir
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42925 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
111
wxPython/samples/wxPIA_book/Chapter-14/grid_editor.py
Normal file
111
wxPython/samples/wxPIA_book/Chapter-14/grid_editor.py
Normal file
@@ -0,0 +1,111 @@
|
||||
import wx
|
||||
import wx.grid
|
||||
import string
|
||||
|
||||
class UpCaseCellEditor(wx.grid.PyGridCellEditor):
|
||||
def __init__(self):
|
||||
wx.grid.PyGridCellEditor.__init__(self)
|
||||
|
||||
def Create(self, parent, id, evtHandler):
|
||||
"""
|
||||
Called to create the control, which must derive from wx.Control.
|
||||
*Must Override*
|
||||
"""
|
||||
self._tc = wx.TextCtrl(parent, id, "")
|
||||
self._tc.SetInsertionPoint(0)
|
||||
self.SetControl(self._tc)
|
||||
|
||||
if evtHandler:
|
||||
self._tc.PushEventHandler(evtHandler)
|
||||
|
||||
self._tc.Bind(wx.EVT_CHAR, self.OnChar)
|
||||
|
||||
def SetSize(self, rect):
|
||||
"""
|
||||
Called to position/size the edit control within the cell rectangle.
|
||||
If you don't fill the cell (the rect) then be sure to override
|
||||
PaintBackground and do something meaningful there.
|
||||
"""
|
||||
self._tc.SetDimensions(rect.x, rect.y, rect.width+2, rect.height+2,
|
||||
wx.SIZE_ALLOW_MINUS_ONE)
|
||||
|
||||
def BeginEdit(self, row, col, grid):
|
||||
"""
|
||||
Fetch the value from the table and prepare the edit control
|
||||
to begin editing. Set the focus to the edit control.
|
||||
*Must Override*
|
||||
"""
|
||||
self.startValue = grid.GetTable().GetValue(row, col)
|
||||
self._tc.SetValue(self.startValue)
|
||||
self._tc.SetInsertionPointEnd()
|
||||
self._tc.SetFocus()
|
||||
self._tc.SetSelection(0, self._tc.GetLastPosition())
|
||||
|
||||
def EndEdit(self, row, col, grid):
|
||||
"""
|
||||
Complete the editing of the current cell. Returns True if the value
|
||||
has changed. If necessary, the control may be destroyed.
|
||||
*Must Override*
|
||||
"""
|
||||
changed = False
|
||||
|
||||
val = self._tc.GetValue()
|
||||
|
||||
if val != self.startValue:
|
||||
changed = True
|
||||
grid.GetTable().SetValue(row, col, val) # update the table
|
||||
|
||||
self.startValue = ''
|
||||
self._tc.SetValue('')
|
||||
return changed
|
||||
|
||||
def Reset(self):
|
||||
"""
|
||||
Reset the value in the control back to its starting value.
|
||||
*Must Override*
|
||||
"""
|
||||
self._tc.SetValue(self.startValue)
|
||||
self._tc.SetInsertionPointEnd()
|
||||
|
||||
def Clone(self):
|
||||
"""
|
||||
Create a new object which is the copy of this one
|
||||
*Must Override*
|
||||
"""
|
||||
return UpCaseCellEditor()
|
||||
|
||||
def StartingKey(self, evt):
|
||||
"""
|
||||
If the editor is enabled by pressing keys on the grid, this will be
|
||||
called to let the editor do something about that first key if desired.
|
||||
"""
|
||||
self.OnChar(evt)
|
||||
if evt.GetSkipped():
|
||||
self._tc.EmulateKeyPress(evt)
|
||||
|
||||
def OnChar(self, evt):
|
||||
key = evt.GetKeyCode()
|
||||
if key > 255:
|
||||
evt.Skip()
|
||||
return
|
||||
char = chr(key)
|
||||
if char in string.letters:
|
||||
char = char.upper()
|
||||
self._tc.WriteText(char)
|
||||
else:
|
||||
evt.Skip()
|
||||
|
||||
class TestFrame(wx.Frame):
|
||||
def __init__(self):
|
||||
wx.Frame.__init__(self, None, title="Grid Editor",
|
||||
size=(640,480))
|
||||
|
||||
grid = wx.grid.Grid(self)
|
||||
grid.CreateGrid(50,50)
|
||||
grid.SetDefaultEditor(UpCaseCellEditor())
|
||||
|
||||
|
||||
app = wx.PySimpleApp()
|
||||
frame = TestFrame()
|
||||
frame.Show()
|
||||
app.MainLoop()
|
Reference in New Issue
Block a user