赞
踩
事件处理,是 图形 程序中不可或缺的重要组成部分,相比来说,控件只是组成一台机器的零部件, 而事件处理则是驱动这台机器“正常”运转的关键所在,它能够将零部件之间“优雅”的贯穿起来,因此“事件处理”可谓是 GUI 程序的“灵魂”,同时它也是实现人机交互的关键。
`Tkinter 提供的事件处理机制允许我们为“控件”绑定相应的事件和事件处理函数(即 callback函数),从而实现控件与用户的交互,这点我们在目录控件使用过。
语法格式如下 -
widget.bind(“
<
event>
”,func)
<
event>
:一个字符串参数,表示事件的类型,并使用“尖括号”的形式进行包裹;下面列出了 Event
中常用的事件类型 -
Tkinter 为其规定了相应的语法格式:
***
`***
<>
:事件类型必须包含在“尖括号”内;<Double-Button-1>
、大写锁定键<Lock>
以及<Alt-Shift>
等;<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 |
num | 1/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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。