当前位置:   article > 正文

【Python】【进阶篇】十三、Tkinter的Event事件处理_tkinter event参数

tkinter event参数

十三、Tkinter的Event事件处理

事件处理,是 图形 程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件, 而事件处理则是驱动这台机器“正常”运转的关键所在,它能够将零部件之间“优雅”的贯穿起来,因此“事件处理”可谓是 GUI 程序的“灵魂”,同时它也是实现人机交互的关键。

`Tkinter 提供的事件处理机制允许我们为“控件”绑定相应的事件和事件处理函数(即 callback函数),从而实现控件与用户的交互,这点我们在目录控件使用过。

语法格式如下 -

widget.bind(“<event>”,func)

  • <event>:一个字符串参数,表示事件的类型,并使用“尖括号”的形式进行包裹;
  • func:表示事件的处理函数(callback,即回调函数),当触发事件时,Tk 会携带事件对象(Event)去调用 func 方法。

下面列出了 Event 中常用的事件类型 -
Tkinter 为其规定了相应的语法格式:

***`***

  1. <>:事件类型必须包含在“尖括号”内;
  2. modifier:可选项,事件类型的修饰符,通常用于描述组合键、双击<Double-Button-1>、大写锁定键<Lock>以及<Alt-Shift>等;
  3. type:是必不可少的一项,表示事件的具体类型;
  4. detail:可选项,通常用于描述具体的哪个按键,比如 <Button-1> 表示鼠标左键;

常使用的 modifier 修饰符 -

名称说明
Control事件发生时需按下 Control 键
Alt事件发生时需按下 Alt 键
Shift事件发生时需按下 Shift 键
Lock事件发生时需处于大写锁定状态
Double事件连续发生两次,比如双击鼠标

下面列出了 Event 中常用的事件类型,如下所示:

名称说明
<ButtonPress-1>单击鼠标左键,简写为<Button-1>,后面的数字可以是1/2/3,分别代表左键、中间滑轮、右键
<ButtonRelease-1>释放鼠标左键,后面数字可以是1/2/3,分别代表释放左键、滑轮、右键
<B1-Motion>按住鼠标左键移动,<B2-Motion><B3-Motion>分别表示按住鼠标滑轮移动、右键移动
<MouseWheel>转动鼠标滑轮
<Double-Button-1>双击鼠标左键
<Enter>鼠标光标进入控件实例
<Leave>鼠标光标离开控件实例
<Key>按下键盘上的任意键
<KeyPress-字母>/<KeyPress-数字>按下键盘上的某一个字母或者数字键
<KeyRelease>释放键盘上的按键
<Return>回车键,其他同类型键有<Shift>/<Tab>/<Control>/<Alt>
<Space>空格键
<UP>/<Down>/<Left>/<Right>方向键
<F1><F12>常用的功能键
<Control-Alt>组合键,再比如<Control-Shift-KeyPress-T>,表示用户同时点击 Ctrl + Shift + T
<FocusIn>当控件获取焦点时候触发,比如鼠标点击输入控件输入内容,可以调用 focus_set() 方法使控件获得焦点
<FocusOut>当控件失去焦点时激活,比如当鼠标离开输入框的时候
<Configure >控件的发生改变的时候触发事件,比如调整了控件的大小等
<Deactivate>当控件的状态从“激活”变为“未激活”时触发事件
<Destroy>当控件被销毁的时候触发执行事件的函数
<Expose>当窗口或组件的某部分不再被覆盖的时候触发事件
<Visibility>当应用程序至少有一部分在屏幕中是可见状态时触发事件

下面列出了 Event 中常用的事件对象,如下所示:

名称说明
widget发生事件的是哪一个控件
x,y相对于窗口的左上角而言,当前鼠标的坐标位置
x_root,y_root相对于屏幕的左上角而言,当前鼠标的坐标位置
char用来显示所按键相对应的字符
keysym按键名,比如 Control_L 表示左边的 Ctrl 按键
keycode按键码,一个按键的数字编号,比如 Delete 按键码是107
num1/2/3中的一个,表示点击了鼠标的哪个按键,按键分为左、中、右
width,height控件的修改后的尺寸,对应着 <Configure>事件
type事件类型
from tkinter import (
    Tk, Frame, RAISED,
    Label, TOP
)

win = Tk()
win.title("Python自学网")
win.config(bg="green")
win.geometry('380x270')
# 窗口不允许改变
win.resizable(0, 0)
win.iconbitmap('./python.png')


def handleMotion(event):
    lb1['text'] = '你移动了光标的所在位置'
    lb2['text'] = '目前光标位置:x =' + str(event.x) + ';y=' + str(event.y)
    print('光标当前位置', event.x, event.y)


# 创建一个窗体容器frame
frame = Frame(win, relief=RAISED, borderwidth=2, width=300, height=200)
frame.bind('`<Motion>`', handleMotion)
lb1 = Label(frame, text='没有任何事件触发', bg='purple', )
# 使用place进行位置布局,下一节会介绍
lb1.place(x=20, y=20)
lb2 = Label(frame, text='')
lb2.place(x=16, y=60)
frame.pack(side=TOP)
# 显示窗口
win.mainloop()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/124951
推荐阅读
相关标签
  

闽ICP备14008679号