栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

   ✨✨✨

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

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

目录

 前言

鼠标和键盘事件

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("",mouseTest)
c1.bind("",testDrag)


root.bind("",keyboardTest)
root.bind("",press_a_test)          #只针对小写的a,大写的A不管用
root.bind("",release_a_test)

root.mainloop()

结果如下:

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

 

 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(“”,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("", mouseTest1)

# command属性直接绑定事件
b2 = Button(root, text="测试command2",
       command=lambda: mouseTest2("小白", "加油"))
b2.pack(side="left")


# 给所有Button按钮都绑定右键单击事件
b1.bind_class("Button", "", 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博客

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/735003.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号