tkinter 提供了一个强大的事件驱动机制:
widget.bind(event, hander)
其中 hander
是可回调的函数等句柄。
本章以几个例子来说明事件驱动。先载入可能使用到的包:
from tkinter import ttk, Tk
from tkinter import N, W, E, S
from tkinter import StringVar
1 鼠标按键
下面的代码提供了一个绑定鼠标左键的例子:
class App(Tk):
def __init__(self):
super().__init__()
self.out_var = StringVar()
self.geometry('200x200')
self.text = ttk.Label(textvariable=self.out_var)
self.text.grid()
# 绑定鼠标左键
self.bind('<1>', self.get_location)
def get_location(self, event):
self.out_var.set(f'点击的位置: {(event.x, event.y)}')
app = App()
app.mainloop()
该例子通过鼠标左键获取窗口的坐标位置。显示效果图:
图1 鼠标左键获取坐标
2 键盘按键
使用 <Key>
可以获取键盘的按键:
class App(Tk):
def __init__(self):
super().__init__()
self.out_var = StringVar()
self.geometry('200x200')
self.text = ttk.Label(textvariable=self.out_var)
# 绑定鼠标左键
self.bind('<Key>', self.get_char)
self.text.grid()
def get_char(self, event):
self.out_var.set(f'点击的键盘字符为: {(event.char)}')
app = App()
app.mainloop()
效果图为:
图2 获取键盘的按键
3 获取鼠标移动的位置
使用 <Motion>
可以获取鼠标的移动位置:
class App(Tk):
def __init__(self):
super().__init__()
self.out_var = StringVar()
self.geometry('200x100')
self.text = ttk.Label(textvariable=self.out_var)
# 绑定鼠标左键
self.bind('<Motion>', self.stroke)
self.text.grid()
def stroke(self, event):
self.out_var.set(f'当前的位置为: {(event.x, event.y)}')
app = App()
app.mainloop()
效果图:
图3 捕获鼠标当前位置