事件(Event)就是程序中发生的事。例如敲击键盘上的某一个键、单击鼠标等。

 

对于事件,程序需要对其作出反应。

 

程序可以使用事件处理函数来指定当出发某个事件时所做出的反应

 

python中的事件主要有:

1.键盘事件:

KeyPress:按下键盘某键时触发

KeyRelease:释放某个键时触发

2.鼠标事件

ButtonPress/Button:按下鼠标某个键时触发,<Button-1>表示按下左键,<Button-2>表示中键,<Button-3表示鼠标右键>。

ButtonRelease:释放鼠标某个键时触发

Motion:鼠标拖拽某个组件移动时触发

Enter:鼠标指针进入某个组件时触发

Leave:鼠标指针移出某个组件时触发

MouseWheel:鼠标滚轮滚动时触发

3.窗体事件

Visibility:组件变为可视状态时触发

Configure:组件大小改变时触发

 

事件类型必须放置于尖括号<>内。

用法例子:

<Button-1> #按下鼠标左键
<KeyPress-A>  #按下键盘上的A键
<Control-Shift-KeyPress-A>  #同时按下Ctrl、Shift、和A键

 

可以使用bind()函数,将某个事件和某个函数相关联。

实例:

from tkinter import *

root = Tk()


def printRect(event):
    print('rectangle左键事件')


def printRect2(event):
    print('rectangle右键事件')


def printLine(event):
    print('Line事件')


cv = Canvas(root, bg='white')

rt1 = cv.create_rectangle(10, 10, 110, 110, width=8, tags='r1')  # 此长方形标签为r1

cv.tag_bind('r1', '<Button-1>', printRect)  # 按标签绑定,左键点击r1时,执行printRect事件
cv.tag_bind('r1', '<Button-3>', printRect2)
cv.create_line(180, 70, 280, 70, width=10, tags='r2')
cv.tag_bind('r2', '<Button-1>', printLine)  # 点击r2线条时,执行printLine
cv.pack()
root.mainloop()

 

事件处理函数:事件处理函数往往带有一个event参数。传递event对象实例。

实例1:

from tkinter import *


def printkey(event):
    print('你按下了:' + event.char)  # 监听了键盘的事件,event.char表示字符


root = Tk()
entry = Entry(root)  # 实例化输入框
entry.bind('<KeyPress>', printkey)  # 监听在输入框输入的某键
entry.pack()
root.mainloop()

实例2:

from tkinter import *


def leftClick(event):
    print('x坐标:', event.x)
    print('y坐标:', event.y)
    print('相对于屏幕左上角的x坐标:', event.x_root)
    print('相对于屏幕左上角的y坐标:', event.y_root)


root = Tk()
lab = Label(root, text='Hello')
lab.pack()
lab.bind('<Button-1>', leftClick)  # 监听鼠标左键点击位置的坐标
root.mainloop()