Python GUI开发之Tkinter基础篇12:事件绑定

在这里插入图片描述

一、前言

对于每个组件来说,可以通过bind()方法将函数或方法绑定到具体的事件上,当被触发的事件满足该组件绑定的事件时,Tkinter就会带着事件描述去调用handler()方法。
简单的说,用户触发的鼠标、键盘等操作都可以看成一个事件,而我们可以将这些事件和组件绑定起来,以达到触发事件时,可以和组件交互的作用。
今天介绍三个事件(鼠标左键Button-1,键盘Key,鼠标运动轨迹Motion),并制作两个简单的小游戏,当有事件被触发时,组件会发生相应的改变。

二、Button事件

代码实现:

from tkinter import *
root = Tk()

def callback(event):
    print("点击坐标",event.x,event.y)

frame = Frame(root,width = 300,height = 300) #创建一个Frame
frame.bind("<Button-1>",callback)  #将鼠标左键事件与Frame绑定
frame.pack()

mainloop()

运行
在这里插入图片描述
可以看到,当鼠标移动到Frame范围内,单击左键,事件触发,坐标被打印出来。

三、Key事件

代码实现:

from tkinter import *

root = Tk()
def callback(event):
    print("按键位置:",event.char)
    if(event.char == 'x'):
        print("按对啦!")
        var.set("按对啦!")
    else:
        print("按错啦,要按x键!")
        var.set("按错啦,要按x键")
        
var = Variable()
var.set("请按下x键")
frame = Frame(root,width = 200,height = 200)
Label(root,textvariable = var,bg = "green").pack()
frame.bind("<Key>",callback)
frame.focus_set()   
frame.pack()

mainloop()

运行:
在这里插入图片描述
当我们按下x键时,提示按对了,如果按其他键,则会提示我们按错了,需要重新按。

四、Motion事件

代码实现:

from tkinter import *

root = Tk()
def callback(event):
    print("鼠标位置:",event.x,event.y)
    var.set("鼠标放这里吧~")
    location = ('鼠标位置:',event.x,event.y)
    var2.set(location)
    print(var2.get())

def callback2(event):
    print("鼠标位置:",event.x,event.y)
    var.set("放稳了,不要划出去了~")
    location = ['鼠标位置:',event.x,event.y]
    var2.set(location)
    print(var2.get())

def callback3(event):
    print("鼠标位置:",event.x,event.y)
    var.set("鼠标放这里吧~")
    var2.set("放其他地方去,我是用来显示坐标的~")
var = Variable()
var2 = StringVar()
var.set("鼠标放这试试")
var2.set("鼠标位置:未知")
frame = Frame(root,width = 300,height = 300,bg = "green")
frame.bind("<Motion>",callback)
frame.pack()
label = Label(root,textvariable = var,bg = "red",width = 42)
label.bind("<Motion>",callback2)
label.pack()
label_location = Label(root,textvariable = var2,bg = "yellow",width = 42)
label_location.bind("<Motion>",callback3)
label_location.pack()
mainloop()

运行:

鼠标放在绿色区域时:
在这里插入图片描述
鼠标放在红色区域时:
在这里插入图片描述
鼠标放在黄色区域时:
在这里插入图片描述
可以看到,当我们将鼠标移动到绿色、红色和黄色区域时,Label标签会给我们不同的显示。

五、结语

1、Button事件一共有几种,其中Button-1是鼠标左键触发,Button-2是鼠标中键,button-3是鼠标右键,button-4滚轮上滚(Linux),button-5滚轮下滚(Linux)。

2、只有当组件获得焦点的时候才能接收键盘事件Key,所以使用focus_set()获得焦点,可以设置Frame的takefocus选项为True,然后使用Tab将焦点转移上来。

3、当需要var.set()一个字符串时,可以将它组成一个元组或者列表,然后set进去。

如您在使用过程中有任何问题,请加QQ群进一步交流。

QQ交流群:906015840 (备注:物联网项目交流)。

获取资料:微信扫描下方二维码,关注公众号:一个物联网项目的前世今生。

静晨出品:静之所想,晨之所计
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值