11.2.3 tkinter事件绑定
将组件与事件关联起来就是事件绑定。在Python中,tkinter允许将事件绑定在组件上,格式如下:
widget表示组件,bind()方法将指定的事件绑定到组件上,event参数接收要绑定的事件,handler表示处理事件的函数。
当被触发的事件满足该组件绑定的事件时,tkinter就会带着事件对象(Event)去调用handler()方法。
例如,想要获取鼠标在窗口上单击时的坐标,则可将事件<ButtonRelease-1>与窗体绑定,再设置一个函数,用于处理鼠标单击事件。实现代码如下:
运行结果:
如果希望将一个事件绑定到程序所有的组件上,则可以使用bind_all()函数,格式如下:
【案例11-1】 剪刀石头布游戏。
剪刀石头布游戏是日常生活中常见的一种猜拳游戏,又称为“猜丁壳”,古老而简单,这个游戏的主要目的是解决争议,因为三者相互制约,因此无论平局几次,总会有胜负的时候。在游戏规则中,石头克剪刀,剪刀克布,布克石头。现在设计一个图形化界面的猜拳游戏,实现玩家与计算机比拼,五局三胜,得出最后比分。
案例分析:
游戏可分为3个模块。
·窗口布局:创建窗口,显示字符串变量以及各种在方法中要用到的其他变量。将3张出拳的图片存为一个列表,以便后续选取。
·布局设置:在窗口上显示标签、比分、图片按钮。按钮上的图片即剪刀、石头、布。玩家方用3个按钮显示,以便玩家选择,当玩家单击相应图片时,调用判断方法,并传递选项值过去。计算机方只显示一个按钮,图片从3张图片中随机显示。
·结果判断:当玩家单击按钮选项时调用,接收玩家传递过来的选择值,将该值与计算机中随机生成的值进行对比,判断是玩家赢,则玩家积分加1,计算机赢,则计算机积分加1,平局则两方积分都加1。累计判断次数,当次数为5时,给出最后胜负判断结果,并弹出对话框询问是否重玩游戏,或是退出游戏。
实现代码如下:
运行结果如图11-6所示。
图11-6 游戏运行效果