效果图图如下


\"教程丨Python绘图之动态简洁时钟\"

 

作者: 路飞

阅读文本大概需要 2 分钟。

\"教程丨Python绘图之动态简洁时钟\"

 

环境准备

运行平台: Windows 7 旗舰版

Python版本: Python 3.6.4

IDE: Python自带的IDLE

时间飞快的流逝,唯独现在,我有一种想对爱因斯坦发牢骚的心情。时间根据每个人的主观感受,既会变长,也会变短,相对论真是个既浪漫又伤感的东西呢。

绘制代码

import turtle 
from datetime import * 
# 画笔向前运动一段距离停下 
def Skip(step): 
 turtle.penup() 
 turtle.forward(step) 
 turtle.pendown() 
def mkHand(name, length): 
 # 注册Turtle形状,建立表针Turtle 
 turtle.reset() 
 Skip(-length * 0.1) 
 # 开始记录多边形的顶点
 turtle.begin_poly() 
 turtle.forward(length * 1.1) 
 # 停止记录多边形的顶点 
 turtle.end_poly() 
 # 返回最后记录的多边形 
 handForm = turtle.get_poly() 
 turtle.register_shape(name, handForm) 
def Init(): 
 global secHand, minHand, hurHand, printer 
 # 重置Turtle指向北 
 turtle.mode(\"logo\") 
 # 建立三个表针Turtle并初始化 
 mkHand(\"secHand\", 135) 
 mkHand(\"minHand\", 125) 
 mkHand(\"hurHand\", 90) 
 secHand = turtle.Turtle() 
 secHand.shape(\"secHand\") 
 minHand = turtle.Turtle() 
 minHand.shape(\"minHand\") 
 hurHand = turtle.Turtle() 
 hurHand.shape(\"hurHand\") 
 for hand in secHand, minHand, hurHand: 
 hand.shapesize(1, 1, 3) 
 hand.speed(0) 
 # 建立输出文字Turtle 
 printer = turtle.Turtle() 
 # 隐藏画笔的turtle形状 
 printer.hideturtle() 
 printer.penup() 
def SetupClock(radius): 
 # 建立表的外框 
 turtle.reset() 
 turtle.pensize(7) 
 for i in range(60): 
 Skip(radius) 
 if i % 5 == 0: 
 turtle.forward(20) 
 Skip(-radius - 20) 
 Skip(radius + 20) 
 if i == 0: 
 turtle.write(int(12), align=\"center\", font=(\"Courier\", 14, \"bold\")) 
 elif i == 30: 
 Skip(25) 
 turtle.write(int(i/5), align=\"center\", font=(\"Courier\", 14, \"bold\")) 
 Skip(-25) 
 elif (i == 25 or i == 35): 
 Skip(20) 
 turtle.write(int(i/5), align=\"center\", font=(\"Courier\", 14, \"bold\")) 
 Skip(-20) 
 else: 
 turtle.write(int(i/5), align=\"center\", font=(\"Courier\", 14, \"bold\")) 
 Skip(-radius - 20) 
 else: 
 turtle.dot(5) 
 Skip(-radius) 
 turtle.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) 
 turtle.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() 
 turtle.tracer(True) 
 # 100ms后继续调用tick 
 turtle.ontimer(Tick, 100) 
def main(): 
 # 打开/关闭龟动画,并为更新图纸设置延迟 
 turtle.tracer(False) 
 Init() 
 SetupClock(160) 
 turtle.tracer(True) 
 Tick() 
 turtle.mainloop() 
if __name__ == \"__main__\": 
 main()
 

运行结果

\"教程丨Python绘图之动态简洁时钟\"

收藏 打印