✨✨✨
感谢优秀的你打开了小白的文章
“希望在看文章的你今天又进步了一点点,离美好生活更近一步!”
目录
前言
鼠标和键盘事件
event 对象常用属性
测试键盘和鼠标事件
lambda 表达式详解
❤️测试lambda用法
多种事件绑定方式汇总
组件对象的绑定
组件类的绑定
多种事件绑定方式汇总
往期回顾
前言
一个 GUI 应用整个生命周期都处在一个消息循环(event loop) 中。它等待事件的发生,并作出相应的处理。Tkinter 提供了用以处理相关事件的机制、处理函数可被绑定给各个控件的各种事件。
widget.bind(event, handler)
如果相关事件发生, handler 函数会被触发, 事件对象event 会传递给 handler 函数.
鼠标和键盘事件
代码
说明
<1>
鼠标左键按下。 2 表示右键,3 表示中键;
鼠标左键释放
按住鼠标左键移动
双击左键
鼠标指针进入某一组件区域
鼠标指针离开某一组件区域
滚动滚轮;
按下 a 键,a 可用其他键替代
释放 a 键。
按下 A 键(大写的 A)
同时按下 alt 和 a;alt 可用 ctrl 和 shift 替代
快速按两下 a
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
鼠标当前位置,相对于整个屏幕
测试键盘和鼠标事件
# coding=utf-8# 测试键盘和鼠标事件from tkinter import *root = Tk();root.geometry("530x300")c1 = Canvas(root,width=300,height=300,bg="pink")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("
结果如下:
随便写了数字,事件发生,鼠标事件与键盘事件。
lambda 表达式详解 lambda 表达式定义的是一个匿名函数,只适合简单输入参数,简单计算返回结果,不适合功能复杂情况。lambda 定义的匿名函数也有输入、也有输出,只是没有名字。语法格式如下:
lambda 参数值列表:表达式参数值列表即为输入。表达式计算的结构即为输出。
lambda 表达式定义的是一个匿名函数,只适合简单输入参数,简单计算返回结果,不适合功能复杂情况。lambda 定义的匿名函数也有输入、也有输出,只是没有名字。语法格式如下:
lambda 参数值列表:表达式参数值列表即为输入。表达式计算的结构即为输出。
写 一 个 最 简 单 的 案 例 : add3args = lambda x,y,z:x+y+z #print(add3args(10,20,30))
上面的lambda 表达式相当于如下函数定义:
def add3args(x,y,z):return x+y+z
lambda 表达式的参数值列表可以为如下内容:
lambda 格式
说明
lambda x, y: x*y
函数输入是 x 和 y,输出是它们的积 x*y
lambda:None
函数没有输入参数,输出是 None
lambda:aaa(3,4)
函数没有输入参数,输出是 aaa(3,4)的结
果
lambda *args:
sum(args)
输入是任意个数的参数,输出是它们的和
lambda
**kwargs: 1
输入是任意键值对参数,输出是
❤️测试lambda用法
from tkinter import *root = Tk();root.geometry("270x50")def mouseTest1(): print("command方式,简单情况:不涉及获取event对象,可以使用")def mouseTest2(a,b): print("a={0},b={1}".format(a,b))Button(root, text="测试command1", command=mouseTest1).pack(side="left")Button(root, text="测试command2", command=lambda: mouseTest2("小", "白")).pack(side="left")root.mainloop()
在弹出框中进行事件的选择。
多种事件绑定方式汇总 组件对象的绑定
通过command 属性绑定(适合简单不需获取event 对象)
Button(root,text=”登录”,command=login)
通过bind()方法绑定(适合需要获取event 对象)
c1 = Canvas(); c1.bind(“
组件类的绑定
调用对象的bind_class 函数,将该组件类所有的组件绑定事件:
w.bind_class(“Widget”,”event”,eventhanler)
多种事件绑定方式汇总
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("
往期回顾
GUI 图形用户界面编程(一): (278条消息) GUI 图形用户界面编程(一)_am_student的博客-CSDN博客
GUI 图形用户界面编程(二):
(278条消息) GUI 图形用户界面编程(二)经典案例_am_student的博客-CSDN博客
GUI 图形用户界面编程(三):
(278条消息) GUI 图形用户界面编程(三)基本框架与Label的使用_am_student的博客-CSDN博客
GUI 图形用户界面编程(四):
(278条消息) GUI 图形用户界面编程(四)-Button组件_am_student的博客-CSDN博客
GUI 图形用户界面编程(五):
(357条消息) GUI 图形用户界面编程(五)-登录页面_am_student的博客-CSDN博客