返回顶部
首页 > 资讯 > 后端开发 > Python >PythonTkinter之事件处理详解
  • 230
分享到

PythonTkinter之事件处理详解

2024-04-02 19:04:59 230人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录事件绑定方法常用事件类型Event事件对象事件处理,是 GUI 程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件, 而事件处理则是驱动这台机器“正

事件处理,是 GUI 程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件, 而事件处理则是驱动这台机器“正常”运转的关键所在,它能够将零部件之间“优雅”的贯穿起来,因此“事件处理”可谓是 GUI 程序的“灵魂”,同时它也是实现人机交互的关键。

对于“事件”这一名词,在讲解控件时也偶尔提及过,在本节我们将对 Tkinter 中的事件处理机制做更为详细的介绍。

在一款 GUI 程序中,我们将用户对软件的操作统称为“事件”,比如鼠标点击按钮、键盘输入文本以及窗口管理器触发的重绘事件等,这些事件有一个共同的特点,即都是由用户自身直接或者间接触发的。

事件绑定方法

Tkinter 提供的事件处理机制允许我们为“控件”绑定相应的事件和事件处理函数(即 callback函数),从而实现控件与用户的交互,其语法格式如下:

widget.bind("<event>",func)

上述语法中,widget 代表控件的实例对象,之后,采用 bind() 方法进行事件绑定,该函数有两个参数:

  • <event>:一个字符串参数,表示事件的类型,并使用“尖括号”的形式进行包裹;
  • func:表示事件的处理函数(callback,即回调函数),当触发事件时,Tk 会携带事件对象(Event)去调用 func 方法。

注意:bind() 方法可以完成事件与处理函数绑定,而使用 unbind() 方法可以将事件与处理函数解绑。

常用事件类型

事件类型(也称事件码)是 Tkinter 模块规定的,主要包括鼠标、键盘、光标等相关事件,Tkinter 为其规定了相应的语法格式:

<modifier-type-detail>

上述语法由三部分组成,说明如下:

  • <>:事件类型必须包含在“尖括号”内;
  • modifier:可选项,事件类型的修饰符,通常用于描述组合键、双击<Double-Button-1>、大写定键<Lock>以及<Alt-Shift>等;
  • type:是必不可少的一项,表示事件的具体类型;
  • detail:可选项,通常用于描述具体的哪个按键,比如 <Button-1> 表示鼠标左键;

这里有必要对经常使用的 modifier 修饰符做简单的介绍,修饰符可以修改事件的激活条件,比如双击鼠标或者需要同时按下某个键才触发事件,常用的修饰符如下:

修饰符说明
Control事件发生时需按下 Control 键
Alt事件发生时需按下 Alt 键
Shift事件发生时需按下 Shift 键
Lock事件发生时需处于大写锁定状态
Double事件连续发生两次,比如双击鼠标
Triple事件连续发生三次
Quadruple事件连续发生四次

下述表格中介绍了 Tkinter 中经常使用的事件类型,如下所示:

事件码说明
<ButtonPress-1>单击鼠标左键,简写为<Button-1>,后面的数字可以是1/2/3,分别代表左键、中间滑轮、右键
<ButtonRelease-1>释放鼠标左键,后面数字可以是1/2/3,分别代表释放左键、滑轮、右键
<B1-Motion>按住鼠标左键移动,<B2-Motion>和<B3-Motion>分别表示按住鼠标滑轮移动、右键移动
<MouseWheel>转动鼠标滑轮
<Double-Button-1>双击鼠标左键
<Enter>鼠标光标进入控件实例
<Leave>鼠标光标离开控件实例
<Key>按下键盘上的任意键
<KeyPress-字母>/<KeyPress-数字>按下键盘上的某一个字母或者数字键
<KeyRelease>释放键盘上的按键
<Return>回车键,其他同类型键有<Shift>/<Tab>/<Control>/<Alt>
<Space>空格键
<UP>/<Down>/<Left>/<Right>方向键
<F1>...<F12>常用的功能键
<Control-Alt>组合键,再比如<Control-Shift-KeyPress-T>,表示用户同时点击 Ctrl + Shift + T
<FocusIn>当控件获取焦点时候触发,比如鼠标点击输入控件输入内容,可以调用 focus_set() 方法使控件获得焦点
<FocusOut>当控件失去焦点时激活,比如当鼠标离开输入框的时候
<Configure >控件的发生改变的时候触发事件,比如调整了控件的大小等
<Deactivate>当控件的状态从“激活”变为“未激活”时触发事件
<Destroy>当控件被销毁的时候触发执行事件的函数
<Expose>当窗口或组件的某部分不再被覆盖的时候触发事件
<Visibility>当应用程序至少有一部分在屏幕中是可见状态时触发事件

Event事件对象

当事件触发后,Tkinter 会自动将事件对象交给回调函数进行下步的处理,Event 对象包含了以下常用属性:

属性说明
widget发生事件的是哪一个控件
x,y相对于窗口的左上角而言,当前鼠标的坐标位置
x_root,y_root相对于屏幕的左上角而言,当前鼠标的坐标位置
char用来显示所按键相对应的字符
keysym按键名,比如 Control_L 表示左边的 Ctrl 按键
keycode按键码,一个按键的数字编号,比如 Delete 按键码是107
num1/2/3中的一个,表示点击了鼠标的哪个按键,按键分为左、中、右
width,height控件的修改后的尺寸,对应着 <Configure>事件
type事件类型

下面看一组关于“键盘事件”的使用示例:

from tkinter import *
# 定义事件函数,必须用event参数
def show_key(event):
    # 查看触发事件的按钮
    s=event.keysym
    # 将其显示在按钮控件上
    lb.config(text=s)
root=Tk()
root.config(bg='#87CEEB')
root.title("C语言中文网")
root.geometry('450x350+300+200')
root.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网loGo.ico')
# 添加一个按钮控件
lb=Label(root,text='请按键',fg='blue',font=('微软雅黑',15))
# 给按钮控件绑定事件,按下任意键,然后调用事件处理函数。注意,此处需要在英文状态下进行输入
lb.bind('<Key>',show_key)
# 设置按钮获取焦点
lb.focus_set()
lb.pack()
# 显示窗口
root.mainloop()

程序运行结果如下:

图1:Tkinter事件处理

注意:在上述示例中,只有当 Label 控件获取焦点后才能接收键盘事件,因此在给控件绑定事件和回调函数后,需要使用 focus_set() 方法来获取焦点。

下面再看一组关于“鼠标事件”的相关示例:

# 定义事件函数
from tkinter import *
def handleMotion(event):
    lb1['text'] = '你移动了光标的所在位置'
    lb2['text'] = '目前光标位置:x ='+ str(event.x)+';y='+str(event.y)
    print('光标当前位置',event.x,event.y)
# 创建主窗口
win = Tk()
win.config(bg='#87CEEB')
win.title("C语言中文网")
win.geometry('450x350+300+200')
win.iconbitmap('C:/Users/Administrator/Desktop/C语言中文网logo.ico')
# 创建一个窗体容器frame
frame = Frame (win, relief=RAISED, borderwidth=2, width=300,height=200)
frame.bind('<Motion>',handleMotion)
lb1 = Label(frame,text='没有任何事件触发', bg='purple', )
# 使用place进行位置布局,下一节会介绍
lb1.place (x=20,y=20)
lb2 = Label(frame,text='')
lb2.place (x=16,y=60)
frame.pack(side=TOP)
# 显示窗口
win.mainloop()

程序运行结果如下:

图2:Tkinter鼠标移动事件

以上就是python Tkinter之事件处理详解的详细内容,更多关于Python Tkinter事件处理的资料请关注编程网其它相关文章!

--结束END--

本文标题: PythonTkinter之事件处理详解

本文链接: https://lsjlt.com/news/163101.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PythonTkinter之事件处理详解
    目录事件绑定方法常用事件类型Event事件对象事件处理,是 GUI 程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件, 而事件处理则是驱动这台机器“正...
    99+
    2024-04-02
  • Vue3学习之事件处理详解
    目录1.基本使用2.事件修饰符3.按键修饰符1.基本使用 我们可以使用 v-on 指令来监听 DOM 事件,从而执行 JavaScript 代码。 v-on 指令可以缩写为 @ 符号...
    99+
    2022-12-08
    Vue3事件处理 Vue3事件 Vue 事件处理
  • Vue之事件处理和事件修饰符详解
    <div id="root"> <h2>{{name}},加油!</h2> <!-- 阻止默认事...
    99+
    2024-04-02
  • Input系统之InputReader处理合成事件详解
    目录正文生成合成事件加载并解析输入设备的配置InputReader 处理合成事件创建与配置 InputDevice配置基本参数配置坐标系配置 Surface小结正文 Input系统:...
    99+
    2022-11-16
    InputReader处理合成事件 InputReader合成事件
  • PythonTkinter对话框控件使用详解
    目录文件选择对话框颜色选择对话框消息对话框除了基本的控件之外,Tkinter 还提供了三种对话框控件: 文件选择对话框:filedailog 颜色选择对话框:colorchooser...
    99+
    2024-04-02
  • Pythontkinter实现桌面软件流程详解
    目录前言环境使用模块使用界面代码功能代码前言 tkinter:GUI桌面应用开发模块,写软件界面你还可以打包成exe软件, 哪怕你没有python环境, 一样可以用虽然不一定要有界面...
    99+
    2024-04-02
  • Redis源码设计剖析之事件处理示例详解
    目录1. Redis事件介绍2. 事件的抽象2.1 文件事件结构2.2 时间事件结构2.3 事件状态结构3. 事件的实现1. Redis事件介绍 Redis服务器是一个事件驱动程序,所谓事件驱动就是输入一条命令并且按下回...
    99+
    2024-04-02
  • node.js中的事件处理机制详解
    EventEmitter类 在Node.js的用于实现各种事件处理的event模块中,定义了一个EventEmitter类。所有可能触发事件的对象都是一个集成了EventEmitter类的子类的实例对象,在...
    99+
    2022-06-04
    详解 机制 事件
  • 利用javaScript处理常用事件详解
    目录1.窗体事件2.鼠标事件3.键盘事件4.常用事件方法(包括窗口事件,鼠标事件,键盘事件,文本事件)5.事件冒泡和事件捕捉JS事件指再浏览器窗体或者HTML元素上发生的,乐意触发J...
    99+
    2024-04-02
  • Python基础详解之邮件处理
    目录一、发送电子邮件二、发送纯文本格式的邮件三、发送HTML格式的邮件四、发送带附件的邮件五、发送图片的邮件六、接收电子邮件七、使用POP3协议下载邮件一、发送电子邮件 Python...
    99+
    2024-04-02
  • JS之onunload、onbeforeunload事件详解
    onunload事件和onbeforeunload事件都是window对象的事件,用于在浏览器窗口即将关闭时触发相应的操作。onun...
    99+
    2023-09-01
    JS
  • Vue3 之 Vue 事件处理指南
    目录一、基本事件处理二、向父组件发出自定义事件三、鼠标修饰符四、键盘修饰符五、系统修饰符六、事件修饰符一、基本事件处理 使用v-on指令(简称@),我们可以监听DOM事件并运行处理程...
    99+
    2024-04-02
  • 详解Android的两种事件处理机制
    UI编程通常都会伴随事件处理,Android也不例外,它提供了两种方式的事件处理:基于回调的事件处理和基于监听器的事件处理。 对于基于监听器的事件处理而言,主要就是为Andro...
    99+
    2022-06-06
    事件 Android
  • ECharts鼠标事件的处理方法详解
    事件是用户或浏览器自身执行的某种动作,如click、mouseover、页面加载完毕后触发load事件,都属于事件。 为了记录用户的操作和行为路径,需要完成鼠标事件处理和组件交互的行...
    99+
    2024-04-02
  • Node的事件处理和readline模块详解
    目录一、Node的事件处理二、通过Node的readline模块实现终端的输入总结一、Node的事件处理 1、采用事件驱动模型 2、Node是单线程的,采用事件轮询方式来处理事件 3...
    99+
    2024-04-02
  • Android事件处理的两种方式详解
    安卓提供了两种方式的事件处理:基于回调的事件处理和基于监听的事件处理。 基于监听的事件处理 基于监听的事件处理一般包含三个要素,分别是: Event Source(事件源):事件发生...
    99+
    2023-02-28
    Android事件处理 Android事件处理机制 Android事件处理流程
  • Vue中的事件处理详情
    目录一、事件处理二、事件修饰符三、键盘事件使用技巧一、事件处理 给按钮绑定一个 click 事件,点击弹出提示信息 <!--普通写法--> <button...
    99+
    2024-04-02
  • VUE入门学习之事件处理
    目录1.函数绑定2.带参数和$event 3.多个函数绑定一个事件4.事件修饰符5.按键修饰符 6. 系统修饰键 .exact 修饰...
    99+
    2024-04-02
  • 详解OpenCV中简单的鼠标事件处理
    目录cv2.setMouseCallback函数语法 回调函数  谈及鼠标事件,就是在触发鼠标按钮后程序所做出相应的反应,但是不影响程序的整个线程。这有...
    99+
    2024-04-02
  • 详解jQuery的核心函数和事件处理
    目录事件页面载入 事件委派 事件切换 事件 总结事件 页面载入  1.ready(fn)当DOM载入就绪可以查询及操纵时绑定一个要执...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作