Python Tkinter 事件处理

Python Tkinter 事件处理

  1. 一个GUI应用整个生命周期都处在一一个消息循环(eventloop)中。它等待事件的发生,并作出相应的处理。

  2. Tkinter提供了用以处理相关事件的机制,处理函数可被绑定给各个控件的各种事件

    • widget.bind(event, handler)
  3. 如果相关事件发生,handler 函数会被触发,事件对象 event 会传递给 handler 函数.

鼠标和键盘事件

代码 说明
<Button-1>
<ButtonPress-1>
<1>、<2>、<3>
鼠标左键按下;
1 表示鼠标左键;
2 表示中间(鼠标滚轮按键);
3 表示鼠标右键;
<ButtonRelease-1> 鼠标左键释放
<B1-Motion> 按住鼠标左键移动
<Double-Button-1> 双击鼠标左键
<Enter> 鼠标指针进入某一组件区域
<Leave> 鼠标指针离开某一组件区域
<MouseWheel> 滚动滚轮
<KeyPress-a> 按下键盘上的 a 键;a 可用其他键替换
<KeyRelease-a> 释放 a 键
<KeyPress-A> 按下键盘上的 A 键(大写的 A)
<Alt-KeyPress-a> 同时按下 alt 和 a ;alt 可用 Ctrl 和 Shift 替代
<Double-KeyPress-a> 快速按两下 a 键
<Control-v> CTRL 和 v 键同时按下;v 键可换成其他按键;与<Ctrl-KeyPress-v>同理

event 对象常用属性

名称 说明
char 按键字符,仅对键盘事件有效
keycode 按键编码,仅对键盘事件有效
keysym 按键名称,仅对键盘事件有效
比如按下空格键
键的 char:" " 键的 keycode: 32 键的 keysym: space
比如按下 a 键:
键的 char: a 键的 keycode: 65 键的 keysym: a
num(<1>,<2>,<3>) 鼠标按键,仅对鼠标事件有效
type 所触发的事件类型
widget 引起事件的组件
width,height 组件改变后的大小,仅对 Configure 有效
x,y 鼠标当前位置,相对于父容器
x_root,y_root 鼠标当前位置,相对于整个屏幕

多种事件绑定方式汇总

  1. 组件对象绑定

    • 通过 command 属性绑定(适合简单不需获取 event 对象);
      • 例如:Button(root, text="登录", command=login)
    • 通过 bind() 方法绑定(适合需要获取 event 对象);
      • 例如:c1 = Label(root); c1.bind("", drawLine)
  2. 组件类的绑定

    • 调用对象的 bind_class 函数,将该组件类所有的组件绑定事件:
      • w.bind_class("Widget", "event" , eventhandler)
    • 比如:btn01.bind_class("Button", "", func)
posted @ 2021-05-29 10:47  廿九九  阅读(934)  评论(0)    收藏  举报