使用command方法,一方面并非所有的组件都支持command binding,另一方面command支持的键鼠事件有限。tkinter提供了另一个方式,通过bind()函数,将具体事件与组件绑定在一起。从而,当事件触发时,将自动调用绑定的函数。语法如下:
1、实现方式
widget.bind(event, handler, add=None)
1、event即为指定的事件
2、handler为调用的函数
3、add为组件额外增加的handler,即对widget组件而言,在event发生时,额外地增加了handler这个事件处理函数。
import tkinter as tk
from tkinter import ttk
def return_pressed(event):
print('Return key pressed.')
root = tk.Tk()
btn = ttk.Button(root, text='Save')
btn.bind('<Return>', return_pressed)
btn.focus()
btn.pack(expand=True)
root.mainloop()
启用add的案例。实现了一个事件,可以触发多个handler。
import tkinter as tk
from tkinter import ttk
def return_pressed(event):
print('Return key pressed.')
def log(event):
print(event)
root = tk.Tk()
btn = ttk.Button(root, text='Save')
btn.bind('<Return>', return_pressed)
btn.bind('<Return>', log, add='+')
btn.focus()
btn.pack(expand=True)
root.mainloop()
事件模式
tkinter使用事件模式将事件名字映射到具体的事件处理函数,如表明是Retrun键盘。事件模式的格式如下:
<<modifier-type-detail>>
如上,一个事件的被包含在<>符号里,里面有三部分。0个或者多个modifier, 再一个event-type,以及detail信息。比如,,这里没有modifier, 表明是键盘事件里按下了A键盘;<Alt-Control-KeyPress-KP_Delete>,modifier对应的是Alt-Control,type对应的是KeyPress, detail对应的是KP_Delete,整个表明的是 alt+control+delete。
常见Event modifiers:
第四个modifier,与其他type一起用时,如就表明了任意按键事件。
常见Event types:
常见Event Detail
Tkinter允许对主程序窗口的binding
root.bind('<Return>', handler)
对组件类型的binding.
前面讲述的是对某个widget,Tkinter还可以对类型widget进行binding.
root.bind_class('Entry', '<Control-V>', paste)
取消binding
widget.unbind(event)