Python GUI事件机制浅析

775 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言

我们在前面已经对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. 事件绑定方式

  1. command绑定方法

Button(root,command= EVENT)

command 绑定方式特点

  • 方式简单,易上手
  • 程序无法为具体事件(比如鼠标移动、按键事件)绑定事件处理方法
  • 程序无法获取事件相关信息
  1. 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()方式

以上是本期内容,欢迎大佬们点赞评论,下期见~