主要内容 #
- 综合应用:参照python -m turtledemo的clock模型,制作自己的时钟
2.时钟的表针(1):表针的注册 #
上一节课我们完成了时钟钟盘的绘制,本节课我们来完成时钟表针的形状注册以及初始化。事实上关于画笔形状的注册,我们在39课《TURTLE – 函数的应用1》有十分详细的介绍,以下示例我们简单展示了一个分针的动画效果。import turtle ################## def mymove(x,y):#定义mymove函数,功能是让turtle画笔移动到指定位置 turtle.penup() turtle.goto(x,y) turtle.pendown() def myregisiter(name, length):#name和length分别表示需要注册表针的名字和大小 mymove(0,0) turtle.penup()#形状注册时我们一般抬起画笔,只需注册相应形状即可 turtle.hideturtle()#隐藏画笔 turtle.forward(-length * 0.1) turtle.begin_poly()#开始记录多边形 turtle.forward(length * 1.1) turtle.end_poly()#结束记录多边形 p = turtle.get_poly()#得到多边形,完成注册 turtle.register_shape(name, p) ################## turtle.mode('logo') myregisiter('minhand',100) turtle.shape('minhand') turtle.showturtle()#注意我们注册完图形,对turtle画笔是隐藏的,如果使用自己定义的画笔则无需此步 for i in [i for i in range(300) if i%2==0]:#注意循环变量i和列表推导表达式中i的不同 turtle.setheading(i) turtle.done()
2.时钟的表针(2):表针的初始化 #
以下示例定义了自己的画笔列表,并完成了画笔的形状设置和初始化。需要注意的是mymove(x,y),frame(radius),myregisiter(name, length)没有给出具体的定义,需要我们自己复制进来import turtle ################## ''' def mymove(x,y):#定义mymove函数,功能是让turtle画笔移动到指定位置 def frame(radius):#定义frame函数,该函数有一个参数表示钟盘的半径 def myregisiter(name, length):#name和length分别表示需要注册表针的名字和大小 ''' def inithand(radius):#定义inithand(radius)函数,radius表示钟盘半径大小,返回值是已经初始化好的钟针列表 myturtle = [turtle.Turtle() for i in range(3)]#钟针画笔列表 myshape = ["secHand", "minHand", "hourHand"]#钟针画笔名字列表 for i in range(3): myregisiter(myshape[i], radius-10 - i * 20)#注册表针形状,长度秒针>分针>时针 myturtle[i].shape(myshape[i])#设置表针画笔的形状 myturtle[i].shapesize(1, 1, i*2)#设置表针粗细 myturtle[i].setheading(i*90)#初始化钟针的角度时间是6:15,结合钟表想一想为什么是6:15 return myturtle #返回钟针列表 ################## turtle.tracer(False)#隐藏图形 radius=100#钟表半径 frame(radius)#钟表表盘 myturtle=inithand(radius)#表针初始化 turtle.tracer(True)#显示图形 turtle.done()