在《Python中tkinter编程入门8-CSDN博客》中提到,tkinter中的Canvas表示画布,可以在画布中显示文字和图片。除了以上功能外,还可以在Canvas中添加对鼠标或键盘的响应。
1 为Canvas添加事件响应
可以通过Canvas的bind()方法添加对鼠标或键盘等事件的响应,代码如图1所示。
图1 Canvas对鼠标或键盘的响应
其中,bind()方法的第一个参数指定了要响应的事件,该参数是一个字符串,其格式为“<事件1-事件2>”,<Button-1>表示鼠标左键点击事件,<Alt-A>表示Alt键和A键同时被按下的事件;第二个参数指定了一个自定义函数paint,当第一个参数指定的事件发生时,调用该函数。
2 响应函数
我们希望在Canvas上,点击鼠标左键,就会在该位置处显示一个椭圆。通过多次点击鼠标左键实现画图的功能。
响应函数paint()的代码如图2所示。
图2 paint()函数
其中,paint()函数的参数event表示鼠标点击事件,event.x和event.y分别表示鼠标点击处的横纵坐标。第8行中,通过Canvas的实例canvas调用create_oval()方法来画椭圆,x0、y0、x1和y1的含义如图3所示,从第4-7行代码中可以看出,此时create_oval()方法画的是一个半径为2的圆;fill参数指定了该圆的填充颜色。
图3 create_oval()方法中x0、y0、x1和y1的含义
3 运行效果
运行该程序,通过点击鼠标左键就可以在相应位置画红色的圆形,如图4所示。
图4 运行效果
4 完整代码
import tkinter
def paint(event):
x0 = event.x-4
y0 = event.y-4
x1 = event.x+4
y1 = event.y+4
canvas.create_oval(x0, y0, x1, y1, fill='red')
root = tkinter.Tk()
canvas = tkinter.Canvas(root, bg='lightblue', width=450, height=450)
canvas.bind('<Button-1>', paint)
canvas.pack()
root.mainloop()