第二部分 Python提高—GUI图形用户界面编程(五)

事件处理

文章目录

  • 鼠标和键盘事件
  • 多种事件绑定方式汇总
    • 组件对象的绑定
    • 组件类的绑定

一个GUI 应用整个生命周期都处在一个消息循环(event loop) 中。它等待事件的发生,并作出相应的处理。
Tkinter 提供了用以处理相关事件的机制. 处理函数可被绑定给各个控件的各种事件。

widget.bind(event, handler)

如果相关事件发生, handler 函数会被触发, 事件对象event 会传递给handler 函数

鼠标和键盘事件

代码说明
<Button-1><ButtonPress-1><1>鼠标左键按下。2 表示右键,3 表示中键;
<ButtonRelease-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按键名称,仅对键盘事件有效。比如按下空格键:键的char: 键的keycode:32 ,键的keysym:space,比如按下a 键:键的char:a 键的keycode:65 键的keysym:a
num鼠标按键,仅对鼠标事件有效
type所触发的事件类型
widget引起事件的组件
width,height组件改变后的大小,仅Configure 有效
x,y鼠标当前位置,相对于父容器
x_root,y_root鼠标当前位置,相对于整个屏幕

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

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")c1.bind("<Button-1>",mouseTest) # 鼠标左键事件,调用mouseTest函数
c1.bind("<B1-Motion>",testDrag) # 按住鼠标左键移动事件,调用testDrag函数
root.bind("<KeyPress>",keyboardTest) # 键盘事件,调用keyboardTest函数
root.bind("<KeyPress-a>",press_a_test)# 按压键盘a事件,调用press_a_test函数
root.bind("<KeyRelease-a>",release_a_test) # 释放a事件,调用release_a_test函数
root.mainloop()

在这里插入图片描述

多种事件绑定方式汇总

组件对象的绑定

  1. 通过command 属性绑定(适合简单不需获取event 对象
Button(root,text=”登录”,command=login)
  1. 通过bind()方法绑定(适合需要获取event 对象
c1 = Canvas()
c1.bind(<Button-1>,drawLine)

组件类的绑定

调用对象的bind_class 函数,将该组件类所有的组件绑定事件:

w.bind_class(“Widget”,”event”,eventhanler)

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

示例 多种事件绑定方式总结

# coding=utf-8
# 多种事件绑定方式汇总
from tkinter import *
root = Tk()
root.geometry("270x30")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("zzz", "huahua"))
b2.pack(side="left")
b1 = Button(root, text="测试bind()绑定")
b1.pack(side="left")# bind 方式绑定事件
b1.bind("<Button-1>", mouseTest1)
# command 属性直接绑定事件
b2 = Button(root, text="测试command2",
command=lambda: mouseTest2("lala", "dada"))
b2.pack(side="left")
# 给所有Button 按钮都绑定右键单击事件<Button-2>
b1.bind_class("Button", "<Button-2>", mouseTest3)
root.mainloop()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/637162.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

飞书API(4):筛选数据的三种思路

截止到上一篇&#xff0c;终于通过飞书 API 完整获取到飞书多维表的数据。但是&#xff0c;有些场景&#xff0c;比如数据源会出现脏数据&#xff0c;毕竟如果是运营过程多人协作维护的数据&#xff0c;要想保持数据完美简直是天方夜谭&#xff01;再比如我们不需要完整的数据&…

ChatGPT研究论文提示词集合3-【数据收集】、【数据分析】和【解释与讨论】

点击下方▼▼▼▼链接直达AIPaperPass &#xff01; AIPaperPass - AI论文写作指导平台 目录 1.数据收集 2.数据分析 3.讨论与解释 4.书籍介绍 AIPaperPass智能论文写作平台 近期小编按照学术论文的流程&#xff0c;精心准备一套学术研究各个流程的提示词集合。总共14个步…

都2024 年了,可以卸载的VS Code 插件

在 VS Code 中&#xff0c;庞大的插件市场提供了丰富多样的扩展功能&#xff0c;以增强编码体验和效率。然而&#xff0c;如果你安装了很多插件&#xff0c;就可能会导致&#xff1a; 性能下降&#xff1a;过多的插件可能导致 VS Code 的启动速度变慢&#xff0c;特别是在启动或…

详解QDialogButtonBox的使用

示例图片 QDialogButtonBox 是 Qt 提供的一个方便的组件&#xff0c;用于在对话框中集中管理一组标准按钮&#xff0c;如“确定”、“取消”、“保存”、“关闭”等。它简化了按钮的布局、信号连接以及按钮行为的统一处理&#xff0c;使得对话框的开发更为简洁和规范。以下将…

【GlobalMapper精品教程】075:将影像的颜色赋予点云实现点云真彩色

文章目录 一、加载点云与影像数据二、将影像色彩赋予点云三、保存色彩点云四、注意事项一、加载点云与影像数据 加载本实验数据(data075.rar)中的影像、点云数据,并用Globalmapper提供的卷帘工具(快速浏览图像)查看: 启动卷帘工具,左右拖动实现卷帘效果: 影像VS点云:…

Coggle数据科学 | Coggle 4月竞赛学习:多模态图文问答

本文来源公众号“Coggle数据科学”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;Coggle 4月竞赛学习&#xff1a;多模态图文问答 Part1 内容介绍 在自然语言处理领域&#xff0c;大型语言模型&#xff08;LLM&#xff09;如GPT…

4月18号总结

java学习 网络编程 1.网络分层 网络分层是将网络通信划分为不同的逻辑层次&#xff0c;每一层负责特定的功能&#xff0c;从而实现网络通信的模块化和标准化。常用的网络分层模型包括OSI&#xff08;开放系统互联&#xff09;模型和TCP/IP模型。 特点和作用&#xff1a; 分…

UI5 快速入门教程

环境准备 node >16.8 ,VSCode&#xff0c;官方网址 开始 创建一个根文件夹&#xff0c;根文件中创建一个package.json文件 {"name": "quickstart-tutorial","private": true,"version": "1.0.0","author":…

[python数据处理系列]详解独热编码与标签编码的区别及在Pandas中的实现

目录 一、独热编码与标签编码的区别 二、创建数据集 三、独热编码实现 (一) 自动将所有分类变量进行独热编码 (二) 对指定列进行独热编码 (三) 对进行独热编码的列采用布尔型表示 四、查看数据类型 五、对数据进行独热编码后&#xff0c;数据变成了什么类型 一、独热编码…

Python 数据结构和算法实用指南(三)

原文&#xff1a;zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第七章&#xff1a;哈希和符号表 我们之前已经看过数组和列表&#xff0c;其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效…

如何利用pg_dump和pg_restore迁移从一个PostgreSQL服务器到另一个服务器,同时保持一致性与高效性?

文章目录 解决方案1. 使用pg_dump导出数据2. 将导出的数据复制到目标服务器3. 使用pg_restore导入数据保持一致性与高效性的策略一致性高效性 示例代码导出数据复制数据到目标服务器在目标服务器上解压并导入数据 PostgreSQL数据库的迁移是一个常见的任务&#xff0c;特别是在升…

23.组件注册方式

组件注册方式 一个 Vue 组件在使用前需要先被“注册”&#xff0c;这样 Vue 才能在渲染模板时找到其对应的实现。组件注册有两种方式&#xff1a;全局注册和局部注册 全局注册 import { createApp } from vue import App from ./App.vue import GlobalComponent from ".…