当前位置:首页 > Python教程 > python技巧

Python Turtle库绘制表盘时钟

运行效果:

技术分享图片

 

 

源代码:

              1
            #
             coding=utf-8
              2
              3
            import
             turtle

              4
            from datetime import *
  5  6# 抬起画笔,向前运动一段距离放下  7def Skip(step):
  8    turtle.penup()
  9    turtle.forward(step)
 10    turtle.pendown()
 11 12def mkHand(name, length):
 13# 注册Turtle形状,建立表针Turtle 14    turtle.reset()
 15     Skip(-length * 0.1)
 16# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。 17    turtle.begin_poly()
 18     turtle.forward(length * 1.1)
 19# 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。 20    turtle.end_poly()
 21# 返回最后记录的多边形。 22     handForm = turtle.get_poly()
 23    turtle.register_shape(name, handForm)
 24 25def Init():
 26global secHand, minHand, hurHand, printer
 27# 重置Turtle指向北 28     turtle.mode("logo")
 29# 建立三个表针Turtle并初始化 30     mkHand("secHand", 135)
 31     mkHand("minHand", 125)
 32     mkHand("hurHand", 90)
 33     secHand = turtle.Turtle()
 34     secHand.shape("secHand")
 35     minHand = turtle.Turtle()
 36     minHand.shape("minHand")
 37     hurHand = turtle.Turtle()
 38     hurHand.shape("hurHand")
 39 40for hand in secHand, minHand, hurHand:
 41         hand.shapesize(1, 1, 3)
 42        hand.speed(0)
 43 44# 建立输出文字Turtle 45     printer = turtle.Turtle()
 46# 隐藏画笔的turtle形状 47    printer.hideturtle()
 48    printer.penup()
 49 50def SetupClock(radius):
 51# 建立表的外框 52    turtle.reset()
 53     turtle.pensize(7)
 54for i in range(60):
 55        Skip(radius)
 56if i % 5 == 0:
 57             turtle.forward(20)
 58             Skip(-radius - 20)
 59 60             Skip(radius + 20)
 61if i == 0:
 62                 turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
 63elif i == 30:
 64                 Skip(25)
 65                 turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
 66                 Skip(-25)
 67elif (i == 25 or i == 35):
 68                 Skip(20)
 69                 turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
 70                 Skip(-20)
 71else:
 72                 turtle.write(int(i/5), align="center", font=("Courier", 14, "bold"))
 73             Skip(-radius - 20)
 74else:
 75             turtle.dot(5)
 76             Skip(-radius)
 77         turtle.right(6)
 78 79def Week(t):  
 80     week = ["星期一", "星期二", "星期三",
 81"星期四", "星期五", "星期六", "星期日"]
 82return week[t.weekday()]
 83 84def Date(t):
 85     y = t.year
 86     m = t.month
 87     d = t.day
 88return"%s年%d月%d日" % (y, m, d)
 89 90def Tick():
 91# 绘制表针的动态显示 92     t = datetime.today()
 93     second = t.second + t.microsecond * 0.000001
 94     minute = t.minute + second / 60.0
 95     hour = t.hour + minute / 60.0
 96     secHand.setheading(6 * second)
 97     minHand.setheading(6 * minute)
 98     hurHand.setheading(30 * hour)
 99100    turtle.tracer(False)
101     printer.forward(65)
102     printer.write(Week(t), align="center",
103                   font=("Courier", 14, "bold"))
104     printer.back(130)
105     printer.write(Date(t), align="center",
106                   font=("Courier", 14, "bold"))
107    printer.home()
108    turtle.tracer(True)
109110# 100ms后继续调用tick111     turtle.ontimer(Tick, 100)
112113def main():
114# 打开/关闭龟动画,并为更新图纸设置延迟。115    turtle.tracer(False)
116    Init()
117     SetupClock(160)
118    turtle.tracer(True)
119    Tick()
120    turtle.mainloop()
121122if__name__ == "__main__":
123     main()

原文:https://www.cnblogs.com/yijiahao/p/11740541.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!