——定时器——
turtle.ontimer(fun, t=0),设置一个定时器,在t毫秒后调用fun函数。
参数fun,一个无参数的函数或对象方法。
参数t ,以毫秒计算的时间数值 >= 0。
附录1是秒计时器的代码,执行录屏如下
——恢复缓冲区——
turtle.setundobuffer(size)。
参数size,一个整数或None,表示缓冲区的最大条目数。附录2进行了测试,测试结果:当size=None或size≤0时,关闭恢复区,undo函数无效;当size≥1时,最大有效调用size次undo。
turtle.undobufferentries()。
返回缓冲区的已用的条目数。注意不是最大条目数。附录3把缓冲区最大条目数设为10,执行5次操作后用这个函数查询条目数。测试结果条目数是5。
>>>
undobufferentries=5.
>>>
附录4测试默认的最大条目数,结果是1000。
>>>
max undobufferentries=1000.
>>>
附录5恢复全部缓冲条目。
练习1:仿造附录1,作出有时分秒的计时器。
附录1:
#秒计时器
import turtle as t #导入海龟画图模块
t.setup(500, 500) #建立500x500的窗口
t.screensize(400, 400) #创建400x400的画布
t.up() #提笔
t.ht() #隐藏海龟
t.setx(100) #把海龟位置移到x坐标100处,y坐标不变,由于原坐标是(0,0),所以实际坐标是(100,0)。
font=("黑体",60,"normal") #普通60号(60x60)黑体字
t.write("000.0", align="right", font=font) #右对齐打印000.0
millsTime=0 #以毫秒为单位的累计时间
step=100 #时间间隔数0.1秒
running=False #运行开关
#打印一次时间
def writeTime():
global millsTime #强迫为全局变量,这样可以用于函数体的等号左边
millsTime+=step #增加一个时间间隔
ms=millsTime % 1000 #算出不满秒的数
s=(millsTime-ms)//1000 #算出秒数
ms=ms//100 #算出0.1秒数
st=str(s)+"."+str(ms) #构建打印字符串
t.undo() #清除上面的字符
t.write(st, align="right", font=font) #打印时间字符串
if running: #如果运行开关为真,开启新的计时
t.ontimer(writeTime,step)
else: #如果运行开关为假,重置累计时间
millsTime=0
#鼠标点击开启或关闭
def ss(xdummy=None, ydummy=None):
global running
running = not running
if running:
t.ontimer(writeTime,step)
t.onscreenclick(ss) #把ss绑定到鼠标左键点击画布。
t.mainloop()
附录2:
>>> import turtle as t
>>> t.setup(500, 500)
>>> t.screensize(400, 400)
>>> t.setundobuffer(-1)
>>> t.fd(100)
>>> t.undo()
>>> t.setundobuffer(0)
>>> t.left(90)
>>> t.fd(100)
>>> t.undo()
>>> t.setundobuffer(1)
>>> t.left(90)
>>> t.fd(100)
>>> t.undo()
>>> t.undo()
>>> t.setundobuffer(None)
>>> t.fd(100)
>>> t.undo()
>>>
附录3:
#缓冲区
import turtle as t
t.setup(500, 500)
t.screensize(400, 400)
t.setundobuffer(10)
for i in range(5):
t.fd(5)
print("undobufferentries=%d." % t.undobufferentries())
附录4:
#缓冲区默认最大条目数
import turtle as t
t.setup(500, 500)
t.screensize(400, 400)
t.setundobuffer(10)
maxEtrs=0
while True:
t.fd(5)
temp=t.undobufferentries()
if temp==maxEtrs:
break
else:
maxEtrs=temp
print("max undobufferentries=%d." % maxEtrs)
附录5:
#缓冲区条目数
import turtle as t
t.setup(500, 500)
t.screensize(400, 400)
t.setundobuffer(30)
maxEtrs=0
while True:
t.fd(5)
t.left(5)
temp=t.undobufferentries()
if temp==maxEtrs:
break
else:
maxEtrs=temp
print("max undobufferentries=%d." % maxEtrs)
while t.undobufferentries():
t.undo()