14.4 捕获用户事件网格控件有许多的用户事件。我们将把它们分为鼠标事件和键盘事件。
14.4.1 如何捕获用户的鼠标动作?
对于网格控件,除了不同的鼠标事件类型外,对于这些类型还有一些不同的事件类。最常用的事件类是wx.grid.GridEvent。网格的事件类是wx.CommandEvent的一个子类,它提供了用于获得事件详情的几个方法,如表14.8所示。
表14.8 wx.grid.GridEvent的方法
AltDown():当事件被触发时,如果alt键被按下了,则返回True。
ControlDown():当事件被触发时,如果control键被按下了,则返回True。
GetCol():返回发生事件的单元格所在的列的索引。
GetPosition():返回返回一个wx.Point。它代表事件发生点的逻辑坐标(以像素为单位)。
GetRow():返回发生事件的单元格所在的行的索引。
MetaDown():当事件被触发时,如果met键被按下了,则返回True。
Selecting():如果事件是一个被选事件,则返回True,如果事件是取消选择事件,则返回False。
ShiftDown():当事件被触发时,如果shift键被按下了,则返回True。
与wx.grid.GridEvent相关的有几个不同的事件类型。如表14.9所示。
表14.9 关于网格鼠标事件的单元格事件类型
wx.grid.EVT_GRID_CELL_CHANGE:当用户通过编辑器改变单元格中的数据时触发该事件。
wx.grid.EVT_GRID_CELL_LEFT_CLICK:当用户在一个单元格中敲击鼠标左键时触发该事件。
wx.grid.EVT_GRID_CELL_LEFT_DCLICK:当用户在一个单元格中双击鼠标左键时触发该事件。
wx.grid.EVT_GRID_CELL_RIGHT_CLICK:当用户在一个单元格中敲击鼠标右键时触发该事件。
wx.grid.EVT_GRID_CELL_RIGHT_DCLICK:当用户在一个单元格中双击鼠标右键时触发该事件。
wx.grid.EVT_GRID_EDITOR_HIDDEN:当在编辑会话结束时隐藏一个单元格编辑器则触发该事件。
wx.grid.EVT_GRID_EDITOR_SHOWN:当在编辑会话结束时显示一个单元格编辑器则触发该事件。
wx.grid.EVT_GRID_LABEL_LEFT_CLICK:当用户在行或列的标签区域敲击鼠标左键时触发该事件。
wx.grid.EVT_GRID_LABEL_LEFT_DCLICK:当用户在行或列的标签区域双击鼠标左键时触发该事件。
wx.grid.EVT_GRID_LABEL_RIGHT_CLICK:当用户在行或列的标签区域敲击鼠标右键时触发该事件。
wx.grid.EVT_GRID_LABEL_RIGHT_DCLICK:当用户在行或列的标签区域双击鼠标右键时触发该事件。
wx.grid.EVT_GRID_Select_CELL:当用户将焦点移到一个新的单元格,并选择它时触发该事件。
有两个事件类型,它们有一个wx.grid.GridSizeEvent实例。这两个事件类型分别是wx.grid.EVT_GRID_COL_SIZE:当列大小被改变时触发,wx.grid.EVT_GRID_ROW_SIZE:当行的大小被改变时触发。网格的尺寸事件有5个与wx.GridEvent!AltDown(), ControlDown(), GetPosition(), MetaDow(), 和ShiftDown相同的方法。wx.grid.GridSizeEvent的最后的一个方法是GetRowOrCol(),该方法返回发生改变的列或行的索引,当然这依赖于具体的事件类型。
事件类型wx.grid.EVT_GRID_RANGE_Select有一个wx.grid.GridRangeSelectEvent的实例,该事件当用户选择连续矩形范围内的单元格中被触发。该事件的实例拥有的方法是GetBottomRightCoords(), GetBottomRow(), GetLeftCol(), GetRightCol(), GetTopRightCoords()和GetTopRow(),它们返回被选择区域的整数索引或(row, col)元组。
最后,事件类型EVT_GRID_EDITOR_CreateD有一个wx.grid.GridEditorCreatedEvent实例。这个事件在当通过一个编辑会话创建了一个编辑器时被触发。该事件实例的方法有GetCol(), GetRow(), 和GetControl(),它们分别返回发生事件的列,行的索引和使用的编辑控件。
14.4.2 如何捕获用户的键盘动作?
除了使用鼠标外,用户还可以使用键盘来在网格中移动。你可以通过代码的方法来使用表14.10中的移动方法改变光标。其中的许多方法都要求一个expandSelection参数。每个方法中的expandSelection的作用都相同。如果这个参数为True,那么当前的选项将被扩展以容纳这个新的光标位置。如果这个参数为False,那么当前的选项被新的光标所取代。
表14.10 网格光标移动方法
MoveCursorDown(expandSelection):向下移动光标。如果expandSelection为False,等同于按下"下箭头键",如果为True,则等同于按下"shift-下箭头键"。
MoveCursorDownBlock(expandSelection):向下移动光标。如果expandSelection为False,则等同于"ctrl-下箭头键",如果为True,则等同于"shift-ctrl-下箭头键"。
MoveCursorLeft(expandSelection):向左移动光标。如果expandSelection为False,等同于按下"左箭头键",如果为True,则等同于按下"shift-左箭头键"。
MoveCursorLeftBlock(expandSelection):向左移动光标。如果expandSelection为False,则等同于"ctrl-左箭头键",如果为True,则等同于"shift-ctrl-左箭头键"。
MoveCursorRight(expandSelection):向右移动光标。如果expandSelection为False,等同于按下"右箭头键",如果为True,则等同于按下"shift-右箭头键"。
MoveCursorRightBlock(expandSelection):向右移动光标。如果expandSelection为False,则等同于"ctrl-右箭头键",如果为True,则等同于"shift-ctrl-右箭头键"。
MoveCursorUp(expandSelection):向上移动光标。如果expandSelection为False,等同于按下"上箭头键",如果为True,则等同于按下"shift-上箭头键"。
MoveCursorUpBlock(expandSelection):向上移动光标。如果expandSelection为False,则等同于"ctrl-上箭头键",如果为True,则等同于"shift-ctrl-上箭头键"。
MovePageDown():显示下一页的单元格。
MovePageUp():显示上一页的单元格。