# coding=utf-8 |
|
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() |
初级程序员
by: 云代码会员 发表于:2021-01-03 15:36:01 顶(1) | 踩(0) 回复
OK
回复评论