小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
我们在前面已经对Python GUI-TKinter库(Grid、Place、Pack)布局管理器 、Canvas组件、Checkbutton组件、Radio button组件等,以搭积木的形式来编写GUI程序
我们前面学习的图形界面,但这些界面还不能响应用户的任何操作,比如单击窗口的按钮,该按钮并不会提供任何响应。
这就是因为程序没有为这组件绑定任何事件处理的缘故。
本期,我们将学习Python GUI事件处理知识点汇总,Let's go~
1. 事件处理概述
一个GUI应用整个生命周期都处在一个消息循环(event loop)中,它等待事件的发生,并作出相应的处理。
Tkinter 提供了用以处理相关事件的机制,处理函数可被绑定给各个控件的各个事件。
widget.bind(event,handler)
如果相关事件发生,handler 函数会被触发,事件对象event会传递给handler函数。
2. 事件绑定方式
- command绑定方法
Button(root,command= EVENT)
command 绑定方式特点
- 方式简单,易上手
- 程序无法为具体事件(比如鼠标移动、按键事件)绑定事件处理方法
- 程序无法获取事件相关信息
- bind()方法
bn = Button(root)
bn.bind('<Double-1>',EVENT)
bind() 方式
- 第一个参数是事件处理
- 第二个参数是事件处理
3. 鼠标和键盘事件
事件 | 说明 |
---|---|
<Button-1> <ButtonPress-1> <1> | 鼠标左键按下。2表示中键,3表示右键 |
<ButtonPelease-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可以换成其他键位 |
event对象常用属性
名称 | 说明 |
---|---|
char | 按键字符,仅对键盘事件有效 |
keycode | 按键编码,仅对键盘事件有效 |
keysym | 按键名称,仅对键盘事件有效 |
num | 鼠标按键,仅对鼠标事件有效 |
type | 所触发的事件类型 |
widget | 引起事件的组件 |
width,height | 组件改变后的大小,仅Configure有效 |
x,y | 鼠标当前位置,相当于父容器 |
x_root,y_root | 鼠标当前位置,相当于整个屏幕 |
PS重要说明
command/bind 绑定事件时,self.方法,方法后面不能加括号
总结
本期对GUI事件绑定两种方法进行汇总,希望大家在进行GUI编程的时候,推荐使用bind()方式
以上是本期内容,欢迎大佬们点赞评论,下期见~