https://baijiahao.baidu.com/s?id=1635584231414557909&wfr=spider&for=pc
在Python GUI编程中,控件响应事件处理是常用的操作。tkinter库中事件类型有哪些?事件绑定方式有几种?如何编写事件处理函数?这些都是必须要面对的问题。今天,我们对上述内容进行简要汇总。
事件类型
用户通过鼠标、键盘、游戏控制设备在与图形界面交互时,就会触发事件。tkinter事件通常采用了将事件名称放置于尖括号内的字符串表示,尖括号中的内容我们称之为事件类型。事件类型有其通用的定义方式。如下
<[modifier-]…type[-detail]>
其中方括号内的内容为可选参数
modifier为组合键的定义,例如,同时按下Ctrl键;
type为通用类型,例如,键盘按键(KeyPress)
detail用于具体信息,如按下键盘中‘B’键
常用事件类型如下:
【鼠标单击事件】
【组合使用】
事件绑定
常见的事件绑定有以下几类
【创建组件对象实例时指定】
创建组件对象实例时,可以通过其命名参数command指定事件处理函数,如为Button控件绑定单击时间,当控件被单击时执行clickhandler函数处理
b = Button(root, text='按钮', command=clickhandler)
【实例绑定】
调用组件对象实例方法bind,可以为指定组件实例绑定事件
w.bind('
其中,
如绑定组件对象,使得Canvas组件实例c可以处理鼠标右键单击事件(处理函数名称为eventhandler),代码如下:
c=Canvas(); c.bind('Button-3', eventhandler)
【类绑定】
调用组件对象实例方法bind_class函数,可以为特定类绑定事件
w.bind_class('Widget', '
其中,Widget为组件类;
如绑定组件类,使得所有Canvas组件实例可以处理鼠标中键事件(事件处理函数为eventhandler)
c = Canvas(); c.bind_class('Canvas', '
【程序界面绑定】
调用组件对象实例方法bind_all函数,可以为所有组件类型绑定事件
w.bind_all('
同上,其中
如将PrintScreen键与程序中所有组件对象绑定,使得程序界面能处理打印屏幕的键盘事件
c = Canvas(); c.bind('
事件处理函数的编写
【定义事件函数和事件方法】
对于能通过command传入的函数,其参数没有必须指定第一个参数为event的要求。但是通过bind(含bind_class、bind_all,当然,bind_class第一个参数为className,但其后必须是Event实例)绑定的事件,在定义函数方法时(事件处理可以定义为函数,也可以定义为对象的方法),两者都带一个参数event。触发事件调用处理函数时,将传递Event对象实例。
# 函数定义
def handlerName(event):
函数内容
# 类中定义
def handlerName(self, event):
方法内容
【Event事件对象参数属性】
通过传递Event事件对象的属性,可以获取相关参数备程序使用。常用的Event事件参数有以下几种。
widget:产生该事件的控件x, y:当前鼠标位置x_root, y_root:当前鼠标相对于屏幕左上角(0,0)的位置,以像素px为单位。char:字符代码(限键盘事件),作为字符串返回keysym:关键符号(限键盘事件)keycode:关键代码(限键盘事件)num:按钮号码(限鼠标按钮事件)width, height:小部件的新大小(以像素px为单位)(限配置事件)。type:事件类型【实例演示】
下面通过一个实例进行演示,代码如下。
程序运行效果图