3.5 事件

事件描述符是一个字符串,由修饰符、类型符和细节符三个部分构成:

<修饰符>-<类型符>-<细节符>

类型符

事件类型有很多,下面列出较常用的类型符:

Activate

构件从无效状态变成激活状态。

Button

用户点击鼠标按键。具体按键用细节符描述。

ButtonRelease

用户释放鼠标按键。在多数情况下用这个事件可能比 Button 更好,因为如果用户无意 点击了鼠标,可以将鼠标移开构件再释放,这样就不会触发该构件的点击事件。

Configure

用户改变了构件(主要是窗口)大小。

Deactivate

构件从激活状态变成无效状态。

Destroy

构件被撤销。

Enter

用户将鼠标指针移入构件的可见部分。

FocusIn

构件获得输入焦点。通过 Tab 键或 focus_set()方法可使构件获得焦点。

FocusOut

输入焦点从构件移出。

KeyPress

用户按下键盘上的某个键。可简写为 Key。具体按键用细节符描述。

KeyRelease

用户松开按键。

Leave

用户将鼠标指针移开构件。

Motion

用户移动鼠标指针。

修饰符

下面是常用的修饰符:

Alt

用户按下并保持 alt 键。

Control

用户按下并保持 control 键。

Double

在短时间内连续发生两次事件。例如<Double-Button-1>表示快速双击鼠标左键。

Shift

用户按下并保持 shift 键。

Triple

在短时间内连续发生三次事件。

细节符

鼠标事件的细节符用于描述具体绑定的是哪一个鼠标键,1、2、3 分别表示左、中、右 键。

键盘事件的细节符用于描述具体绑定的是哪一个键。对键的命名有多种方式,它们分别对应于 Event 对象中的如下几个属性:

char

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

keycode

键码,即所按键的编码。注意,键码未反映修饰符的情况,故无法区分该键上的不同字 符,即它不是键上字符的编码,故 a 和 A 具有相同的键码。

keysym

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

keysym_num

键符码,是等价于 keysym 的一个数值编码。对普通单字符键来说,就是 ASCII 码。与 键码不同的是,键符码反映了修饰符的情况,因此 a 和 A 具有不同的键符码。

除了可打印字符,常见的特殊按键的键符包括:Alt_L,Alt_R,BackSpace,Cancel, Caps_Lock,Control_L,Control_R,Delete,Down,End,Escape,F1~F12,Home,Insert, Left,KP_0~KP_9,Next,Num_Lock,Pause,Print,Prior,Return,Right,Scroll_Lock, Shift_L,Shift_R,Tab,Up 等等。

常用事件

根据以上介绍的事件描述符的组成,可以构造如下常用事件:

  • <Button-1>:左键点击
  • <Button-2>:中键点击
  • <Button-3>:右键点击
  • <Double-Button-1>:左键双击
  • <Triple-Button-1>:左键三击
  • <B1-Motion>:左键按下并移动,每移一点都触发事件
  • <B2-Motion>:中键按下并移动,每移一点都触发事件
  • <B3-Motion>:右键按下并移动,每移一点都触发事件
  • <ButtonRelease-1>:左键按下并释放
  • <ButtonRelease-2>:中键按下并释放
  • <ButtonRelease-3>:右键按下并释放
  • <Enter>:进入按钮区域
  • <Leave>:离开按钮区域
  • <FocusIn>:键盘焦点移到构件或构件的子构件上
  • <FocusOut>:键盘焦点从本构件移出 a:用户按下小写字母“a” 可打印字符(字母、数字和标点符号)都类似字母 a 这样使用。只有两个例外:空格键 对应的事件<space>,小于号对应的事件是<less>。
  • <Shift-Up>:同时按下 Shift 键和↑键。
  • 与<Shift-Up>类似的还有利用 Shift、Alt 和 Ctrl 构成的各种组合键,例如<Control-a>,
  • <Control-Alt-a>等等。
  • <Key>:按下任意键。
  • 具体按下的键值由传递给回调函数的事件对象的 char 属性提供。如果是特殊键,char 属性值为空串。注意,如果输入上档键(如@#$%^&*之类),当按下 Shift 键时就触发了<Key> 事件,再按下上档键又会触发<Key>。
  • <Configure>:构件改变大小或位置。构件的新尺寸由事件对象的 width 和 height 属性传递。

事件对象

每个事件都导致系统创建一个 Event 对象,该对象将被传递给事件处理程序,从而事件 处理函数能够从该对象的属性获得有关事件的各种信息。事件对象的属性包括:

x,y

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

x_root,y_root

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

num char

鼠标键编号,1、2、3 分别表示左、中、右键。

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

keycode

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

keysym

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

keysym_num:这是 keysym 的数值表示。对普通单字符键来说,就是 ASCII 码。

width,height

构件改变大小后的新尺寸(宽度和高度),单位是像素。仅适用于<Configure>事件。

widget

生成这个事件的构件实例。