可以通过ontimer()函数在海龟绘图时设置定时器,在指定一段时间后,再发生某些指定的动作。
1 定时器的设置
设置定时器之前,需要定义一个无参数的函数,作为指定的动作,代码如图1所示。

图1 定义定时器指定动作的代码
注意1 作为定时器指定的动作函数,一定是要无参数的函数。
之后通过ontimer()函数指定定时器的时间和动作,代码如图2所示。

图2 指定定时器的时间和动作的代码
以上代码的作用是,设置一个定时器,当1000毫秒之后,调用move()函数完成海龟画圆的动作。
2 定时器的连续设置
“1 定时器的设置”中设置的定时器只能执行一次,要实现海龟的连续画圆,则需要在定时器指定动作的函数中再次设置定时器,这样就可以嵌套地设置无限多个定时器,代码如图3所示。

图3 嵌套设置定时器的代码
在定时器指定动作函数move()中,绘制半径为r的圆,每绘制一次,圆的半径增加20。在函数的最后,第8行代码中再次设置定时器。这样就可以嵌套地设置无限多个定时器了。代码运行效果如图4所示。

图4 代码运行效果
3 定时器的控制
可以通过ontimer()函数嵌套设置无限多个定时器,但是没有取消定时器的函数。因此,需要一个变量来控制定时器的创建和取消,代码如图5所示。

图5 带控制变量的定时器动作函数
其中,第4行代码定义的running用来控制定时器的设置和取消,该变量的初始值是True。接下来定义鼠标左键点击的响应函数stop(),当点击了鼠标左键后,取消定时器,此时海龟停止画圆,代码如图6所示。

图6 鼠标左键点击的响应函数
当点击了鼠标左键后,running的值变为False,此时图5所示的定时器动作函数将无法嵌套地设置定时器,相当于取消了定时器。
接下来添加鼠标右键点击的响应函数,当点击了鼠标右键后,再次创建定时器,使得海龟继续画圆,代码如图7所示。

图7 鼠标右键点击的响应函数
当点击了鼠标右键后,running的值标为True,海龟画圆的半径恢复到初始值50,并且再次创建定时器,开始调用move()函数画圆。
最后将stop()函数与start()函数与鼠标左右按键的时间关联起来,如图8所示。

图8 响应函数与鼠标按键事件关联的代码
代码运行的效果如图9所示。

图9 代码运行效果
注意2 以上代码要调用mainloop()或done()函数保持程序一直运行。
4 小结
可以通过ontimer()函数设置定时器,但是此时定时器只能设置一个。在定时器动作函数中嵌套地创建定时器,可以实现无限多定时器的设置。在嵌套设置定时器时,需要通过一个变量来控制定时器的设置和取消。

266

被折叠的 条评论
为什么被折叠?



