编写环境:
1、ActivePython-2.7.2.5-win32-x86
2、wxPython2.8-win32-unicode-2.8.12.1-py27
3、wxFormBuilder_v3.3.3-beta
以下代码是演示如何在wxGrid中增加wxDataPickerCtrl控件的代码,是我查了好久才找到的。
import wx import wx.grid class DatePickerCellEditor(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.DatePickerCtrl(parent, id, size=(120,-1), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY) self.SetControl(self._tc) if evtHandler: self._tc.PushEventHandler(evtHandler) 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* """ s = grid.GetTable().GetValue(row, col) d = wx.DateTime.Now() try: d.SetDay(int(s[:2])) d.SetMonth(int(s[2:4])-1) d.SetYear(int(s[4:8])) self._tc.SetValue(d) except: pass self.startValue = s print self.startValue #print 'self.startValue', self.startValue, type(self.startValue) self._tc.SetValue(d) #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 = str(self._tc.GetValue()) d = self._tc.GetValue() print 'd', d month = d.GetMonth() month = month+1 month = str(month) if len(month)<2: month = '0'+month #val = str(d.GetDay()) + '-'+month + '-'+str(d.GetYear()) val = str(d.GetYear()) + '-' + month + '-' + str(d.GetDay()) print 'val, self.startValue',val, self.startValue 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 DatePickerCellEditor() 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(DatePickerCellEditor()) app = wx.PySimpleApp() frame = TestFrame() frame.Show() app.MainLoop()