2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > GUI 图形用户界面编程(十三)-事件处理

GUI 图形用户界面编程(十三)-事件处理

时间:2018-09-24 17:16:37

相关推荐

GUI 图形用户界面编程(十三)-事件处理

✨✨✨

感谢优秀的你打开了小白的文章

“希望在看文章的你今天又进步了一点点,离美好生活更近一步!”🌈

目录

🌻前言

🍋鼠标和键盘事件

🌟event 对象常用属性

🍺测试键盘和鼠标事件

🌲lambda 表达式详解

❤️测试lambda用法

🏆多种事件绑定方式汇总

组件对象的绑定

组件类的绑定

🍉多种事件绑定方式汇总

🚀往期回顾

🌻前言

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

widget.bind(event, handler)

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

🍋鼠标和键盘事件

🌟event 对象常用属性

🍺测试键盘和鼠标事件

# 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("<Button-1>",mouseTest)c1.bind("<B1-Motion>",testDrag)root.bind("<KeyPress>",keyboardTest)root.bind("<KeyPress-a>",press_a_test)#只针对小写的a,大写的A不管用root.bind("<KeyRelease-a>",release_a_test)root.mainloop()

结果如下:

随便写了数字,事件发生,鼠标事件与键盘事件。

🌲lambda 表达式详解

lambda 表达式定义的是一个匿名函数,只适合简单输入参数,简单计算返回结果,不适合功能复杂情况。lambda 定义的匿名函数也有输入、也有输出,只是没有名字。语法格式如下:

lambda 参数值列表:表达式参数值列表即为输入。表达式计算的结构即为输出。

写 一 个 最 简 单 的 案 例 : add3args =lambdax,y,z:x+y+z #print(add3args(10,20,30))

上面的lambda 表达式相当于如下函数定义:

​​​​​​​def add3args(x,y,z):return x+y+z

lambda 表达式的参数值列表可以为如下内容:

❤️测试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(“<Button-1>”,drawLine)

组件类的绑定

调用对象的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("<Button-1>", mouseTest1)# command属性直接绑定事件b2 = Button(root, text="测试command2",command=lambda: mouseTest2("小白", "加油"))b2.pack(side="left")# 给所有Button按钮都绑定右键单击事件<Button-2>b1.bind_class("Button", "<Button-2>", mouseTest3)root.mainloop()

🚀往期回顾

📣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博客

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。