tkinter-event事件
Tkinter Event事件处理
事件处理,是 GUI 程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件, 而事件处理则是驱动这台机器“正常”运转的关键所在,它能够将零部件之间“优雅”的贯穿起来,因此“事件处理”可谓是 GUI 程序的“灵魂”,同时它也是实现人机交互的关键。
在一款 GUI 程序中,我们将用户对软件的操作统称为“事件”,比如鼠标点击按钮、键盘输入文本以及窗口管理器触发的重绘事件等,这些事件有一个共同的特点,即都是由用户直接或者间接触发的。
事件绑定方法
Tkinter 提供的事件处理机制允许我们为“控件”绑定相应的事件和事件处理函数(即 callback函数),从而实现控件与用户的交互
语法格式:widget.bind(“
widget 代表控件的实例对象,之后,采用 bind() 方法进行事件绑定
该函数有两个参数:
func:表示事件的处理函数(callback,即回调函数),当触发事件时,Tk 会携带事件对象(Event)去调用 func 方法。
注意:bind() 方法可以完成事件与处理函数绑定,而使用 unbind() 方法可以将事件与处理函数解绑。
常用事件类型
事件类型(也称事件码)是 Tkinter 模块规定的,主要包括鼠标、键盘、光标等相关事件
Tkinter 为其规定了相应的语法格式:
上述语法由三部分组成:
<>:事件类型必须包含在“尖括号”内;
modifier:可选项,事件类型的修饰符,通常用于描述组合键、双击
type:是必不可少的一项,表示事件的具体类型;
detail:可选项,通常用于描述具体的哪个按键,比如
这里有必要对经常使用的 modifier 修饰符做简单的介绍,修饰符可以修改事件的激活条件,比如双击鼠标或者需要同时按下某个键才触发事件,常用的修饰符如下:
Control
事件发生时需按下 Control 键
Alt
事件发生时需按下 Alt 键
Shift
事件发生时需按下 Shift 键
Lock
事件发生时需处于大写锁定状态
Double
事件连续发生两次,比如双击鼠标
Triple
事件连续发生三次
Quadruple
事件连续发生四次
Tkinter 中经常使用的事件类型:
<KeyPress-字母>/<KeyPress-数字>按下键盘上的某一个字母或者数字键
比如鼠标点击输入控件输入内容,可以调用 focus_set() 方法使控件获得焦点
比如当鼠标离开输入框的时候
比如调整了控件的大小等
Event事件对象
当事件触发后,Tkinter 会自动将事件对象交给回调函数进行下步的处理
Event 对象包含常用属性:
widget
发生事件的是哪一个控件
x,y相对于窗口的左上角而言,当前鼠标的坐标位置
x_root,y_root
相对于屏幕的左上角而言,当前鼠标的坐标位置
char
用来显示所按键相对应的字符
keysym
查看按键名,比如 Control_L 表示左边的 Ctrl 按键keycode按键码,一个按键的数字编号,比如 Delete 按键码是107num1/2/3中的一个,表示点击了鼠标的哪个按键,按键分为左、中、右
width,height
控件的修改后的尺寸,对应着
1 | from tkinter import * |
注意:只有当 Label 控件获取焦点后才能接收键盘事件,因此在给控件绑定事件和回调函数后,需要使用 focus_set() 方法来获取焦点。
1 | # 定义事件函数 |