3.9 tkinter 之事件驱动范例(更新中)

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 捕获鼠标当前位置
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。