事件类型
用户通过鼠标、键盘、游戏控制设备在与图形界面交互时,就会触发事件。tkinter事件通常采用了将事件名称放置于尖括号内的字符串表示,尖括号中的内容我们称之为事件类型。事件类型有其通用的定义方式。如下:
<[modifier-]…type[-detail]>
- 其中方括号内的内容为可选参数
- modifier为组合键的定义,例如,同时按下Ctrl键;
- type为通用类型,例如,键盘按键(KeyPress)
- detail用于具体信息,如按下键盘中‘B’键
常用类型
鼠标单击事件
事件名 | 作用 |
---|---|
<Button-1> | 单击鼠标左键 |
<Button-2> | 单击鼠标中间键(如果有) |
<Button-3> | 单击鼠标右键 |
<Button-4> | 向上滚动滑轮 |
<Button-5> | 向下滚动滑轮 |
鼠标双击事件
事件名 | 作用 |
---|---|
<Double-Button-1> | 鼠标左键双击 |
<Double-Button-2> | 鼠标中键双击 |
<Double-Button-3> | 鼠标右键双击 |
鼠标释放事件
事件名 | 作用 |
---|---|
<ButtonRelease-1> | 鼠标左键释放 |
<ButtonRelease-2> | 鼠标中键释放 |
<ButtonRelease-3> | 鼠标右键释放 |
鼠标按下并移动事件(即拖动)
事件名 | 作用 |
---|---|
<B1-Motion> | 鼠标左键拖动 |
<B2-Motion> | 鼠标中键拖动 |
<B3-Motion> | 鼠标右键拖动 |
鼠标其他操作
事件名 | 作用 |
---|---|
<Enter> | 鼠标进入控件(放到控件上面) |
<FocusIn> | 控件获得焦点 |
<Leave> | 鼠标移出控件 |
<FocusOut> | 控件失去焦点 |
另外还有键盘按下事件:
:键盘按下,事件event中的keycode,char都可以获取按下的键值
:键位绑定,回车键,其它还有,,,,,等等
事件绑定
创建组件对象实例时,可以通过其命名参数command指定事件处理函数,如为Button控件绑定单击时间,当控件被单击时执行clickhandler函数处理
b = Button(root, text='按钮', command=clickhandler)
调用组件对象实例方法bind,可以为指定组件实例绑定事件
w.bind('<event>', eventhandler, add='')
其中,为事件类型,eventhandler为事件处理函数,可选参数add默认为’’,表示事件处理函数替代其他绑定,如果为‘+’,则加入事件处理队列。
事件处理函数
对于能通过command传入的函数,其参数没有必须指定第一个参数为event的要求。但是通过bind(含bind_class、bind_all,当然,bind_class第一个参数为className,但其后必须是Event实例)绑定的事件,在定义函数方法时(事件处理可以定义为函数,也可以定义为对象的方法),两者都带一个参数event。触发事件调用处理函数时,将传递Event对象实例。
# 定义函数
def handlerFun(event):
# 函数体
pass
event事件对象的属性
通过传递Event事件对象的属性,可以获取相关参数备程序使用。常用的Event事件参数有以下几种:
属性 | 说明 |
---|---|
widget | 产生该事件的控件 |
x,y | 当前鼠标位置 |
x_root, y_root | 当前鼠标相对于屏幕左上角(0,0)的位置,以像素px为单位。 |
char | 字符代码(限键盘事件),作为字符串返回 |
keysym | 关键符号(限键盘事件) |
keycode | 关键代码(限键盘事件) |
num | 按钮号码(限鼠标按钮事件) |
width, height | 小部件的新大小(以像素px为单位)(限配置事件) |
type | 事件类型 |