grid_editor.py

来自「wxPython的基本示例程序」· Python 代码 · 共 112 行

PY
112
字号
import wximport wx.gridimport stringclass 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()

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?