Python turtle库绘制时钟笔记

来源:互联网 发布:淘宝全屏轮播代码 编辑:程序博客网 时间:2024/05/16 05:01
from turtle import *from datetime import * def Skip(step):    penup()    forward(step)    pendown() def mkHand(name, length):    #注册Turtle形状,建立表针Turtle    reset()    Skip(-length*0.1)    begin_poly()    forward(length*1.1)    end_poly()    handForm = get_poly()    register_shape(name, handForm) def Init():    global secHand, minHand, hurHand, printer    mode("logo")# 重置Turtle指向北    #建立三个表针Turtle并初始化    mkHand("secHand", 125)    mkHand("minHand",  130)    mkHand("hurHand", 90)    secHand = Turtle()    secHand.shape("secHand")    minHand = Turtle()    minHand.shape("minHand")    hurHand = Turtle()    hurHand.shape("hurHand")    for hand in secHand, minHand, hurHand:        hand.shapesize(1, 1, 3)        hand.speed(0)    #建立输出文字Turtle    printer = Turtle()    printer.hideturtle()    printer.penup()     def SetupClock(radius):    #建立表的外框    reset()    pensize(7)    for i in range(60):        Skip(radius)        if i % 5 == 0:            forward(20)            Skip(-radius-20)        else:            dot(5)            Skip(-radius)        right(6)         def Week(t):        week = ["星期一", "星期二", "星期三",            "星期四", "星期五", "星期六", "星期日"]    return week[t.weekday()] def Date(t):    y = t.year    m = t.month    d = t.day    return "%s %d %d" % (y, m, d) def Tick():    #绘制表针的动态显示    t = datetime.today()    second = t.second + t.microsecond*0.000001    minute = t.minute + second/60.0    hour = t.hour + minute/60.0    secHand.setheading(6*second)    minHand.setheading(6*minute)    hurHand.setheading(30*hour)         tracer(False)      printer.forward(65)    printer.write(Week(t), align="center",                  font=("Courier", 14, "bold"))    printer.back(130)    printer.write(Date(t), align="center",                  font=("Courier", 14, "bold"))    printer.home()    tracer(True)     ontimer(Tick, 100)#100ms后继续调用tick def main():    tracer(False)    Init()    SetupClock(160)    tracer(True)    Tick()    mainloop() if __name__ == "__main__":           main()

1.画静态表盘

·问题一:如何使得小乌龟在画的时候在圆心变换角度?解答:只要使用right(6)指令使得它每次重新出发画表盘时转6度就好。·问题二:reset()函数在画表格时候有什么用?解答:就是刷新之前的一切,重新执行该函数,但是不会重置其他函数里的内容,只会影响到该函数的内容的重置,重置以后图像消失,小乌龟回到初始位置。

def Skip(step):    penup()    forward(step)    pendown()def SetupClock(radius):    #建立表的外框    reset()    pensize(7)    for i in range(60):        Skip(radius)        if i % 5 == 0:            forward(20)            Skip(-radius-20)        else:            dot(5)            Skip(-radius)        right(6)        SetupClock(160)


2.画指针

#register_shape('名字',形状)给形状注册名字(turtle库方法)

#begin_poly()、end_poly()、get_poly()、register_shape()共同使用,画下该形状并且将形状注册为名字,然后可以拿到其他地方直接使用。





Seth(角度)=setheading(角度)
此操作执行时不保留之前转过的角度而是一直以小乌龟朝向右边为参照。

tracer(False)
tracer(True)
配合使用隐藏绘画轨迹

对应的有像hideturtle()隐藏小乌龟。showturtle()显示小乌龟。


0 0