前面我们学习了turtle库一些绘图指令程序,可以实现一些有趣的绘图。今天就要给大家介绍如何让程序能够对鼠标点击、按下键盘等做出响应。
我们接触过的一些应用程序,大多都是交互性的,它允许用户触摸、点击、拖动或者按下按钮,能够感知到对程序的控制。我们把它叫做事件驱动程序。事件处理程序(事件监听程序)
当我们点击一个图标的时候,可以打开一个窗口,当我们点击窗口的关闭按钮,可以关闭一个窗口,这些都是事件处理程序,因为它会响应或处理来自用户的事件。
正常时候,这些事件就耐心的坐在那里等着,等着用户来告诉它做什么。鼠标点击海龟屏幕事件——onscreenclick
1、turtle.onscreenclick(fun, btn=1, add=None)
fun -- 一个函数,调用时将传入两个参数表示在画布上点击的坐标。
btn -- 鼠标按钮编号,默认值为 1 (鼠标左键)
add -- True 或 False -- 如为 True 则将添加一个新绑定,否则将取代先前的绑定
绑定 fun 指定的函数到鼠标点击屏幕事件。如果 fun 值为 None,则移除现有的绑定
turtle.onscreenclick()接收的参数不是一个值,而是另外一个函数的名称,即setpos()函数,获取鼠标在海龟屏幕上点击的位置坐标(x,y)。回调函数
把一个函数作为参数传递给另外一个函数,则称前者为回调函数(它将由其他的函数回调)。
当我们将一个函数当作参数发送给另外一个函数的时候,内部的函数在其函数名称的后面不需要一对圆括号,例如turtle.onscreenclick(setpos)。
1、from turtle import *
2、pencolor('green') # 设置画笔的颜色为green
3、pensize(60) # 设置画笔的宽度为60
4、speed()
5、bgcolor('black') # 修改背景颜色为黑色
6、onscreenclick(setpos) # 将海龟的位置设置为用户点击的位置
当用户在屏幕上点击鼠标的时候,将海龟的位置移动到点击的位置,而此时海龟的钢笔默认是放下的(pendown),所以在把海龟位置设置为鼠标点击的位置时,就会在画布上留下一条直线。
setpos()函数作为turtle.onscreenclick()的回调函数,可以实现和用户交互,我们点击鼠标的时候,他就会朝着我们点击的位置绘制直线。监听键盘事件——onkeypress
使用键盘交互,使用户可以通过按下箭头键来控制海龟在屏幕上移动。
1、turtle.onkeypress(fun, key=None)
fun -- 一个无参数的函数或 None
key -- 一个字符串: 键 (例如 "a") 或键标 (例如 "space")
key一个字符串,将键盘按键设置为回调函数。如何告诉计算机开始监听按键事件:
turtle.listen(xdummy=None, ydummy=None)设置焦点到 TurtleScreen (以便接收按键事件)
想要让海龟窗口接收到我们的按键事件,就必须要使我们的海龟窗口移动到最前面并且接收焦点,这一点和鼠标点击不同。
当我们在桌面上点击一个窗口的时候,被点击的窗口移到了前面并且接收焦点,这样这个窗口才会接收用户的输入。
这里我在桌面打开了3个记事本,目前“3.txt”这个窗口处于桌面焦点中,现在只有“3.txt”这个记事本窗口可以接收用户的输入,那如果想要在“2.txt”输入内容怎么办?只需要用鼠标点击一下“2.txt”这个窗口,这个窗口就会成为屏幕上的焦点,既可以接收用户的输入了。使
用鼠标可以轻松的完成这样的动作,但是使用键盘的时候,只是按下键盘并不会窗口接收到那些按键事件。
所以,使用turtle.listen()指令可以确保海龟窗口处于桌面的焦点中,这样就可以监听按键事件。
在程序的最后使用listen()命令告诉计算机开始处理我们使用onkeypress()函数连接到函数的所有那些按键的按键事件。
from turtle import *
speed(0)
def up(): # 向上
setheading(90) # 海龟面向屏幕上方
fd(50) # 向上前进50像素
def down(): # 向下
setheading(-90) # 海龟面向屏幕下方
fd(50) # 向下前进50像素
def left(): # 向左
setheading(180) # 向左
fd(50) # 向左前进50像素
def right(): # 向右
setheading(360) # 向右
fd(50) # 向右前进50像素
onkeypress(up,"Up") # 向上
onkeypress(left,"Left")
onkeypress(right,"Right")
onkeypress(down,"Down")
listen() # 监听
定义了4个函数up()、down()、left()和right(),分别来响应上箭头键(↑)、下箭头键(↓)、左箭头键(←)和右箭头键(→),且允许用户通过这些键控制海龟向前移动、向下移动、向左移动和向右移动。
turtle.setheading(to_angle)设置海龟的朝向为 to_angle
通过turtle.setheading(to_angle)可以设定海龟朝向的方向。案例
定义一个绘制随机大小和颜色的螺旋线,让螺旋线绘制在我们鼠标点击的屏幕位置。
# 导入模块
from turtle import *
import random
bgcolor('black')
speed(0)
# 画笔颜色列表
colors = ['gray','white','orange','blue','red','yellow','purple']
# 定义绘制图形函数,在鼠标点击的位置开始绘制
def draw(x,y):
pencolor(random.choice(colors)) # 设置画笔的颜色
size = random.randint(10,40) # 绘制图形的边数,利用随机数来设置
pu()
goto(x,y)
pd()
for x in range(size): # for循环遍历
fd(x * 2)
lt(91)
onscreenclick(draw) # 鼠标点击事件
导入随机模块import random,这样可以随机设置画笔颜色和螺旋线的大小:
colors = ['gray','white','orange','blue','red','yellow','purple']
pencolor(random.choice(colors))
size = random.randint(10,40)
随机模块,以后我们会详细介绍学习。
onscreenclick(draw),每当用户在屏幕上点击鼠标的时候,就会调用draw(x,y)函数,事件监听器就会自动将鼠标点击的x坐标和y坐标传递给draw回调函数。
可以尝试在鼠标点击的位置绘制别的图形。
更多可以关注公众号【陪孩子一起学编程】