widget.bind('<event>', function)
<modifier-modifier-type-detail>
modifier修饰符
修饰符 | 说明 |
Control | 按下ctrl键 |
Alt | 按下Alt键 |
Shift | 按下shift键 |
Lock | 按下CapsLock键 |
Button1, B1 | 鼠标左键按下 |
Button2, B2 | 鼠标滚轮按下 |
Button3, B3 | 鼠标右键按下 |
Double | 连续发生两次 |
Triple | 连续发生三次 |
Quadruple | 连续发生四次 |
type事件类型
Type | Descirption |
Activate | 当组件激活时触发 |
Deactivate | 当组件停用时触发 |
Destroy | 当组件摧毁时触发 |
Map | 当组件由隐藏状态变为显示状态时触发 |
Unmap | 当组件由显示状态变为隐藏状态时触发 |
ButtonPress, Button | 当组件按下时触发 |
ButtonRelease | 当组件弹起时触发 |
Enter | 表示鼠标光标进入某个组件时触发 |
Leave | 表示鼠标光标离开某个组件时触发 |
Expose | 当组件从被遮挡状态中暴露出来时触发 |
Motion | 只要指针移动,就会生成运动事件 |
FocusIn | 当组件获得焦点时触发 |
FocusOut | 当组件失去焦点时触发 |
MouseWheel | 表示鼠标滑轮滚动操作 |
Property | 当窗体的属性被修改或者删除时触发 |
Colormap | 每当与窗口关联的颜色图被更改、安装或卸载时触发 |
Configure | 当组件大小改变时触发 |
KeyPress, Key | 当同时按下,如:<Alt-KeyPress-A>,表示当同时按下Alt 和 A键时触发 |
KeyRelease | 同时放开键 |
Visibility | 当组件变为可视状态时触发 |
import tkinter as tk
import tkinter.messagebox
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry('600x400')
self.set_widget()
self.bind_event()
self.mainloop()
def set_widget(self):
self.frm = tk.Frame(self)
self.frm.pack()
tk.Label(self.frm,text='账号').grid(row=0,column=0)
tk.Label(self.frm,text='密码').grid(row=1,column=0,pady=10)
self.tip = tk.StringVar()
self.tip.set('请输入邮箱或者手机号')
self.ety_name = tk.Entry(self.frm,textvariable=self.tip,fg='gray')
self.ety_name.grid(row=0,column=1,columnspan=3)
self.ety_pwd = tk.Entry(self.frm)
self.ety_pwd.grid(row=1,column=1,columnspan=3)
self.btn_yes = tk.Button(self.frm,text='确定(y)',width=8,command=self.show,underline=3)
self.btn_yes.grid(row=2,column=3)
self.btn_cancel = tk.Button(self.frm,text='取消(d)',width=8,underline=3,command=self.show2)
self.btn_cancel.grid(row=2,column=1)
def bind_event(self):
self.ety_name.bind('<FocusIn>',self.delete_tip)
self.ety_name.bind('<FocusOut>',self.add_tip)
self.ety_pwd.bind('<Return>',self.__show) # 当在密码输入框输入完,按回车键就可以,触发函数。点击了确定按钮
# 设置快捷键
self.bind('<Control-y>',self.__show)
self.bind('<Control-d>',self.__show2)
def add_tip(self,evnet):
ety_name = self.ety_name.get()
if ety_name == '':
self.tip.set('请输入邮箱或者手机号')
self.ety_name.config(fg='gray')
tkinter.messagebox.showerror(message='账号不能为空')
def delete_tip(self,event):
ety_name = self.ety_name.get()
if ety_name == '请输入邮箱或者手机号':
self.ety_name.delete(0,'end')
self.ety_name.config(fg='black')
def show(self):
name = self.ety_name.get()
tkinter.messagebox.showinfo(message=f'welecom {name}')
def __show(self,event):
self.show()
def show2(self):
tkinter.messagebox.showinfo(message='you press cancel')
def __show2(self,event):
self.show2()
App()
Event事件对象
当事件触发后,Tkinter 会自动将事件对象交给回调函数进行下步的处理,Event 对象包含了以下常用属性:
属性 | 说明 |
widget | 发生事件的是哪一个控件 |
x,y | 相对于窗口的左上角而言,当前鼠标的坐标位置 |
x_root,y_root | 相对于屏幕的左上角而言,当前鼠标的坐标位置 |
char | 用来显示所按键相对应的字符 |
keysym | 按键名,比如 Control_L 表示左边的 Ctrl 按键 |
keycode | 按键码,一个按键的数字编号,比如 Delete 按键码是107 |
num | 1/2/3中的一个,表示点击了鼠标的哪个按键,按键分为左、中、右 |
width,height | 控件的修改后的尺寸,对应着 <Configure>事件 |
type | 事件类型 |