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
生成这个事件的构件实例。