在前一篇文章中,我们已经了解是tkinter的一些标签的使用,但一个GUI程序除了让别人看到,还要有一些交互操作,实现人机交互的方法我们称为事件,通过事件分为:鼠标事件,键盘事件和窗口事件。接下来我们将对事件进行介绍,如果对tkinter标签还不了解的可以看看:tkinter
一.事件绑定方法
在使用事件时,我们首先要将进行事件的标签和要发生的事件进行绑定,绑定事件的方法有三种:
1.bind(sequence,func,add) :控件标签绑定
2.bind_class(className,sequence,func,add) :类邦定
3.bind_all(sequence,func,add) :将使用组件事件邦定到事件响应函数上
例如:
import tkinter as tk
import tkinter.messagebox
windows = tk.Tk()
windows.title('事件绑定')
windows.geometry('500x300')
button = tk.Button(windows, text='点击一下')
button.pack()
def func(event):
tk.messagebox.showinfo(title='消息',message='点击了按扭!')
button.bind("<Button>",func)
windows.mainloop()
当我们点击按钮时,就会触发事件,跳出消息框
二.鼠标事件
在上面我们谈到的绑定事件方法中,参数sequence就表示事件,当将该参数换成鼠标事件时,就可以绑定鼠标事件,以下是鼠标的常用事件:
<Button-1> 按下鼠标左键
<Button-2> 按下鼠标中键
<Button-3> 按下鼠标右键
<ButtonRelease-1> 释放鼠标左键
<ButtonRelease-3> 释放鼠标右键
<Double-Button-1> 双击鼠标左键
<Double-Button-3> 双击鼠标右键
<Enter> 鼠标指针进入某一组件区域
<Leave> 鼠标指针离开某一组件区域
<MouseWheel> 鼠标滑轮滚动
例如:
import tkinter as tk
import tkinter.messagebox
windows = tk.Tk()
windows.title('事件绑定')
windows.geometry('500x300')
button = tk.Button(windows, text='点击一下',bg='green')
button1 = tk.Button(windows,text='双击一下')
button2 = tk.Button(windows,text='移入鼠标')
button.pack()
button1.pack()
button2.pack()
def func1(event):
tk.messagebox.showinfo(title='消息',message='点击了按扭!')
def func2(event):
tk.messagebox.showinfo(title='消息', message='双击了按扭!')
def func3(event):
tk.messagebox.showwarning(title='警告',message='鼠标移入!')
button.bind("<Button>",func1)
button1.bind("<Double-Button-1>",func2)
button2.bind("<Enter>",func3)
windows.mainloop()
我们实现了鼠标的点击,双击和移入的事件
三.键盘事件
键盘事件有:
<Key> 所有按键
<KeyPress-A> 按下A键,字母可以所以替换
<Alt-KeyPress-A> 同时按下Alt和A键,可以随意组合
<Double-KeyPress-A> 双击A键,字母A可以随意替换
注:当我们使用键盘事件时,首先要用focus_set()方法将键盘的焦点设置到一个组件上
例如:
import tkinter as tk
windows = tk.Tk()
windows.title('事件绑定')
windows.geometry('500x300')
text = tk.StringVar()
text.set('按键盘')
label = tk.Label(windows,textvariable=text,width=30,height=20)
label.focus_set() # 设置焦点
label.pack()
def func1(event):
msg = f'点击了{event.char}'
text.set(msg)
label.bind('<Key>',func1)
windows.mainloop()
当我们运行代码,按下什么按键就在窗口显示我们按的键
四.窗口事件
窗口事件有:
Activate 控件由不可用转为可用
Configure 控件大小改变时触发
Deactivate 当控件由可用转为不可用时触发
Destroy 当控件被销毁时触发
Expose 当控件从被遮挡状态中暴露出来时触发
FocusOut 当控件失去焦点时触发
FocusIn 当控件获得焦点时触发
Map 当控件由隐藏状态转为显示状态时触发
Property 当窗体的属性被删除或改变时触发
Unmap 当控件由显示状态转为隐藏状态时触发
Visibility 当控件变为可视状态时触发
例如:
import tkinter.messagebox
import tkinter as tk
windows = tk.Tk()
windows.title('事件绑定')
windows.geometry('500x300')
text = tk.StringVar()
text.set('改变窗口大小')
label = tk.Label(windows,textvariable=text,width=30,height=20)
label.focus_set() # 设置焦点
label.pack()
def func1(event):
tk.messagebox.showinfo(title='消息',message='窗口大小改变')
label.bind('<Configure>',func1)
windows.mainloop()
当窗口大小改变时弹出消息框: