python GUI开发: tkinter事件处理的几种方式详解与应用实战

本文主要是介绍python GUI开发: tkinter事件处理的几种方式详解与应用实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:python图形化GUI编程tkinter精讲
景天的主页:景天科技苑

文章目录

  • tkinter事件处理
    • Tkinter如何指定事件处理程序
    • 实例绑定(Instance bind):可以将事件绑定到一个特定的控件。
    • tkinter常见事件表示汇总
      • 常见的鼠标事件类型汇总
      • 常见的键盘事件类型汇总
      • 窗口和控件相关事件类型汇总
    • 鼠标事件和键盘事件用法测试
    • 类绑定(bind_class):可以将事件绑定到类的所有小部件
      • 多种事件绑定方式总结

tkinter事件处理

事件处理(Event Handling),是 GUI 程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件, 而事件处理则是驱动这台机器“正常”运转的关键所在,是实现人机交互的关键。
在一款 GUI 程序中,我们将用户对软件的操作统称为“事件”,比如鼠标点击按钮、键盘输入文本以及窗口管理器触发的重绘等,这些事件有一个共同的特点,即都是由用户自身直接或者间接触发的。
一个 GUI 应用整个生命周期都处在一个消息循环 (event loop) 中,它等待事件的发生,并作出相应的处理。 Tkinter 提供了用以处理相关事件的机制处理函数可被绑定给各个控件的各种事件。
事件(event)是应用程序需要知道识别的一些事情。或者说,事件(event)表示程序某件事发生的信号,可以用来触发一段特定的代码——事件处理程序。
事件处理程序(event handler)是应用程序中的一个函数,当事件发生时调用它。
当事件发生在控件(widget:组件、小部件、控件)上,调用事件处理程序时,我们称之为绑定( binding)。绑定就是将事件和事件处理程序建立联系。

Tkinter如何指定事件处理程序

一、在创建控件对象时,可以使用控件中的command参数指定事件处理程序:command=函数,那么点击控件的时候将会触发函数,适合简单不需获取 event 对象。
二、还可以使用绑定(bind)方法指定事件处理程序,Tkinter可以在以下两个级别将事件处理程序绑定(bind)到事件:

实例绑定(Instance bind):可以将事件绑定到一个特定的控件。

其语法格式如下:

widget.bind(sequence,func,add='')

其中,widget 代表控件的控件对象,之后,采用 bind() 方法进行事件绑定,
该函数的参数:
sequence:表示事件的类型,也称事件码,是 Tkinter 模块规定好的,并使用“尖括号”的形式进行包裹;
Tkinter 中经常使用的事件类型,描述格式为:<[modifier-]-type[-detail]>,其中:
modifier:事件修饰符。如:Alt、Shit组合键和Double事件。
type:事件类型。如:按键(Key)、鼠标(Button/Motion/Enter/Leave/Relase)、Configure等。
detail:事件细节。如:鼠标左键(1)、鼠标中键(2)、鼠标右键(3)。

tkinter常见事件表示汇总

常见的鼠标事件类型汇总

在这里插入图片描述

常见的键盘事件类型汇总

在这里插入图片描述

窗口和控件相关事件类型汇总

在这里插入图片描述

func:表示事件的处理函数,当触发事件时执行。事件处理函数或为普通的函数,或为类中定义的函数(也叫方法)。

函数
def 事件处理函数名称(event):
函数体

类的一个方法
def 事件处理函数名称(self, event):
函数体

其中,self代表实例本身
使用绑定(bind)方法指定事件处理程序函数,和前介绍的面通过command参数指定事件处理函数不同之处是有一个参数,一般写为event,
也可以用其它自定义名称(因损害易读性不建议),通过这个参数能够获取到Event对象的属性(attributes)。

传递给处理程序的Event对象的常用属性如下:
num: 1/2/3中的一个,表示点击了鼠标的哪个按键,按键分为左、中、右
在这里插入图片描述在这里插入图片描述

鼠标事件和键盘事件用法测试

# 测试键盘和鼠标事件from tkinter import *root = Tk();root.geometry("530x300")c1 = Canvas(root,width=200,height=200,bg="green")
c1.pack()def mouseTest(event):print("鼠标左键单击位置(相对于父容器):{0},{1}".format(event.x,event.y))print("鼠标左键单击位置(相对于屏幕):{0},{1}".format(event.x_root,event.y_root))print("事件绑定的组件:{0}".format(event.widget))def testDrag(event):#画椭圆c1.create_oval(event.x,event.y,event.x+1,event.y+1)def keyboardTest(event):print("键的keycode:{0},键的char:{1},键的keysym:{2}".format(event.keycode,event.char,event.keysym))def press_a_test(event):print("press a")def release_a_test(event):print("release a")def press_A_test(event):print("press A")def release_A_test(event):print("release A")#按下鼠标左键触发
c1.bind("<ButtonPress-1>",mouseTest)
#按下鼠标左键移动鼠标触发
c1.bind("<B1-Motion>",testDrag)#按下任意按键触发
root.bind("<KeyPress>",keyboardTest)
#按下小写a时触发
root.bind("<KeyPress-a>",press_a_test)
#按下大写A时触发
root.bind("<KeyPress-A>",press_A_test)
#松开小写a时触发
root.bind("<KeyRelease-a>",release_a_test)
#松开大写a时触发
root.bind("<KeyRelease-A>",release_A_test)root.mainloop()

按下a键,并松下
在这里插入图片描述

按下A键,并松下
在这里插入图片描述

在画布上,按住左键不放,移动
在这里插入图片描述

类绑定(bind_class):可以将事件绑定到类的所有小部件

其语法格式如下:

widget.bind_class(className, sequence,func,add='')

其中,className 代表一类控件的字符串;widget 代表控件对象,随便找个控件对象即可,sequence、func、add见前面说明。
.bind_class类似于.bind(),但适用于所有名为className的控件(例如,“Button”)。

比如:btn01.bind_class(“Button”,”<Button-1>”,func)

多种事件绑定方式总结

# 多种事件绑定方式汇总
from tkinter import *root = Tk();root.geometry("270x130")
root.title("测试绑定类")def mouseTest1(event):print("bind()方式绑定,可以获取event对象")print(event.widget)def mouseTest2(a, b):print("a={0},b={1}".format(a, b))print("command方式绑定,不能直接获取event对象")def mouseTest3(event):print("中键单击事件,绑定给所有按钮啦!!")print(event.widget)b1 = Button(root, text="测试bind()绑定")
b1.pack(side="left")
# bind方式绑定事件
b1.bind("<Button-1>", mouseTest1)# command属性直接绑定事件
b2 = Button(root, text="测试command2",command=lambda: mouseTest2("jingtian", "lingge"))
b2.pack(side="left")# 给所有Button按钮都绑定中键单击事件<Button-2>
b1.bind_class("Button", "<Button-2>", mouseTest3)root.mainloop()

运行
在这里插入图片描述

分别单击鼠标左键两个按钮
第一个是bing绑定对象方法,第二个是command触发的
在这里插入图片描述

鼠标中建单击两个按钮
在这里插入图片描述

这篇关于python GUI开发: tkinter事件处理的几种方式详解与应用实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069101

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

Spring Cloud LoadBalancer 负载均衡详解

《SpringCloudLoadBalancer负载均衡详解》本文介绍了如何在SpringCloud中使用SpringCloudLoadBalancer实现客户端负载均衡,并详细讲解了轮询策略和... 目录1. 在 idea 上运行多个服务2. 问题引入3. 负载均衡4. Spring Cloud Load

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录