8.3.1 事件和事件对象

事件是针对应用程序所发生的事情,并且需要应用程序对它做出响应或进行处理。Tkinter中定义了很多种事件,足以支持常见的 GUI 应用程序开发。

Tkinter 事件可以用特定形式的字符串来描述,称为事件模式。事件模式的一般形式是:

<modifier-type-detail>

其中类型符 type 指定事件类型,最常用的类型有分别表示鼠标事件和键盘事件的 Button 和 Key;修饰符 modifier 用于描述鼠标键或键盘的双击、组合等情况;细节符 detail 指定具体的 鼠标键或键盘按键,如鼠标的左中右三个键分别用 1、2、3 表示,键盘按键用相应字符或按 键名称表示。modifier 和 detail 是可选的,而且事件模式经常可以使用简化形式。例如

<Double-Button-1>

描述符中,修饰符是 Double,类型符是 Button,细节符是 1,综合起来描 述的事件就是双击鼠标左键。

常用的鼠标事件包括:

  • <ButtonPress-1>:按下鼠标左键。可简写为<Button-1>甚至<1>①。类似地有<Button-2>(按下鼠标中键)和<Button-3>(按下鼠标右键)。

  • <B1-Motion>:按下鼠标左键并移动鼠标。类似有<B2-Motion>和<B3-Motion>。

  • <Double-Button-1>:双击鼠标左键。

  • <Enter>:鼠标指针进入构件。

  • <Leave>:鼠标指针离开构件。

① 从易理解和简明的标准看,<Button-1>形式最可取。

常用的键盘事件包括:

  • <Key-a>:按下 a 键。可简写为 a(不用尖括号!)。可打印字符(字母、数字和标点 符号)都可像字母 a 这样使用,但有两个例外:空格键对应的事件是<space>,小于 号键对应的事件是<less>。注意:1 是键盘事件,而<1>是鼠标事件。

  • <Return>:按下回车键。非可打印字符都可像回车键这样用<键名>表示对应事件,例如<Tab>、<Shift_L>、<Control_R>、<Up>、<Down>、<F1>等等。

  • <Key>:按下任意键。

  • <Shift-Up>:同时按下 Shift 键和↑键。类似的还有 Alt 组合、Ctrl 组合。

每个事件都导致系统创建一个 Event 对象,并将该对象传递给事件处理函数。事件对象 具有若干描述事件的属性,常用的有:

  • x 和 y:鼠标点击位置坐标(相对于构件左上角),单位是像素。

  • x_root 和 y_root:鼠标点击位置坐标(相对于屏幕左上角),单位是像素。

  • num:点击的鼠标键号,1、2、3 分别表示左、中、右键。

  • char:如果按下 ASCII 字符键,此属性即是该字符;如果按下特殊键,此属性为空 串。

  • keysym:如果按下普通 ASCII 字符键,此属性即是该字符;如果按下特殊键,此属 性设置为该键的名称(是个字符串)。

  • keycode:所按键的编码。注意,此编码无法区分该键上的不同字符,即它不是键上 字符的编码。

  • keysym_num:这是 keysym 的数值表示。对普通单字符键来说,就是 ASCII 码。 例如,按下任意键都可触发<Key>事件,在事件处理函数中可以根据传递来的事件对象的 char 属性来确定具体按下的是哪一个键。