Python Tkinter 事件处理
Python Tkinter 事件处理
-
一个GUI应用整个生命周期都处在一一个消息循环(eventloop)中。它等待事件的发生,并作出相应的处理。
-
Tkinter提供了用以处理相关事件的机制,处理函数可被绑定给各个控件的各种事件
- widget.bind(event, handler)
-
如果相关事件发生,handler 函数会被触发,事件对象 event 会传递给 handler 函数.
鼠标和键盘事件
| 代码 | 说明 |
|---|---|
| <Button-1> <ButtonPress-1> <1>、<2>、<3> |
鼠标左键按下; 1 表示鼠标左键; 2 表示中间(鼠标滚轮按键); 3 表示鼠标右键; |
| <ButtonRelease-1> | 鼠标左键释放 |
| <B1-Motion> | 按住鼠标左键移动 |
| <Double-Button-1> | 双击鼠标左键 |
| <Enter> | 鼠标指针进入某一组件区域 |
| <Leave> | 鼠标指针离开某一组件区域 |
| <MouseWheel> | 滚动滚轮 |
| <KeyPress-a> | 按下键盘上的 a 键;a 可用其他键替换 |
| <KeyRelease-a> | 释放 a 键 |
| <KeyPress-A> | 按下键盘上的 A 键(大写的 A) |
| <Alt-KeyPress-a> | 同时按下 alt 和 a ;alt 可用 Ctrl 和 Shift 替代 |
| <Double-KeyPress-a> | 快速按两下 a 键 |
| <Control-v> | CTRL 和 v 键同时按下;v 键可换成其他按键;与<Ctrl-KeyPress-v>同理 |
event 对象常用属性
| 名称 | 说明 |
|---|---|
| char | 按键字符,仅对键盘事件有效 |
| keycode | 按键编码,仅对键盘事件有效 |
| keysym | 按键名称,仅对键盘事件有效 比如按下空格键: 键的 char:" " 键的 keycode: 32 键的 keysym: space 比如按下 a 键: 键的 char: a 键的 keycode: 65 键的 keysym: a |
| num(<1>,<2>,<3>) | 鼠标按键,仅对鼠标事件有效 |
| type | 所触发的事件类型 |
| widget | 引起事件的组件 |
| width,height | 组件改变后的大小,仅对 Configure 有效 |
| x,y | 鼠标当前位置,相对于父容器 |
| x_root,y_root | 鼠标当前位置,相对于整个屏幕 |
多种事件绑定方式汇总
-
组件对象绑定
- 通过 command 属性绑定(适合简单不需获取 event 对象);
- 例如:Button(root, text="登录", command=login)
- 通过 bind() 方法绑定(适合需要获取 event 对象);
- 例如:c1 = Label(root); c1.bind("
", drawLine)
- 例如:c1 = Label(root); c1.bind("
- 通过 command 属性绑定(适合简单不需获取 event 对象);
-
组件类的绑定
- 调用对象的 bind_class 函数,将该组件类所有的组件绑定事件:
- w.bind_class("Widget", "event" , eventhandler)
- 比如:btn01.bind_class("Button", "
", func)
- 调用对象的 bind_class 函数,将该组件类所有的组件绑定事件:


浙公网安备 33010602011771号