tkinker 组件 事件绑定
一个 Tkinter 应用程序大部分时间花费在事件循环中(通过 mainloop() 方法进入)。事件可以有各种来源:包括用户触发的鼠标和键盘操作和窗口管理器触发的重绘事件(在多数情况下是由用户间接引起的)。
Tkinter 提供一个强大的机制可以让你自由地处理事件,对于每个组件来说,你可以通过 bind() 方法将函数或方法绑定到具体的事件上。
当被触发的事件满足该组件绑定的事件时,Tkinter 就会带着事件对象(Event)去调用 handler() 方法。
将鼠标点击事件(<Button-1>)与我们自定义的 callback() 方法绑定起来
import tkinter as tk
window = tk.Tk()
window.title('hello thinter')
height = window.winfo_screenheight()
width = window.winfo_screenwidth()
window.geometry('400x300+%d+%d' % ((width - 400) / 2, (height - 300) / 2))
def callback(event):
print("点击位置:", event.x, event.y)
frame = tk.Frame(window, width=200, height=200)
frame.bind("<Button-1>", callback)
frame.pack()
window.mainloop()
绑定键盘事件
import tkinter as tk
window = tk.Tk()
window.title('hello thinter')
height = window.winfo_screenheight()
width = window.winfo_screenwidth()
window.geometry('400x300+%d+%d' % ((width - 400) / 2, (height - 300) / 2))
def callback(event):
print("点击的键盘字符为:", event.char)
frame = tk.Frame(window, width=200, height=200)
frame.bind("<Key>", callback)
frame.focus_set()
frame.pack()
window.mainloop()
鼠标活动轨迹
import tkinter as tk
window = tk.Tk()
window.title('hello thinter')
height = window.winfo_screenheight()
width = window.winfo_screenwidth()
window.geometry('400x300+%d+%d' % ((width - 400) / 2, (height - 300) / 2))
def callback(event):
print("当前位置为:", event.x, event.y)
frame = tk.Frame(window, width=200, height=200)
frame.bind("<Motion>", callback)
frame.pack()
window.mainloop()
下方主要内容:
事件序列
type
modifier
Event 对象
Key names
事件序列
Tkinter 使用一种称为事件序列的机制来允许用户定义事件,用户需使用 bind() 方法将具体的事件序列与自定义的方法相绑定。事件序列是以字符串的形式表示的,可以表示一个或多个相关联的事件(如果是多个事件,那么对应的方法只有在满足所有事件的前提下才会被调用)。
事件序列使用以下语法描述:
<modifier-type-detail>
事件序列是包含在尖括号(<...>)中
type 部分的内容是最重要的,它通常用于描述普通的事件类型,例如鼠标点击或键盘按键点击(详见下方)。
modifier 部分的内容是可选的,它通常用于描述组合键,例如 Ctrl + c,Shift + 鼠标左键点击(详见下方)。
detail 部分的内容是可选的,它通常用于描述具体的按键,例如 Button-1 表示鼠标左键。
事件序列 含义
<Button-1> 用户点击鼠标左键
<KeyPress-H> 用户点击 H 按键
<Control-Shift-KeyPress-H> 用户同时点击 Ctrl + Shift + H


modifier

Event 对象

Key names



