1、表盤
1 from turtle import * 2 from datetime import * 3 4 def Skip(step):#表盤不連續地畫圖 5 penup() 6 forward(step) 7 pendown() 8 9 def SetupClock(radius): 10 #建立表的外框 11 reset() 12 pensize(7) 13 for i in range(60): 14 Skip(radius)#跨越中間這段不畫 15 if i % 5 == 0: 16 forward(20) 17 Skip(-radius-20)#抬起畫筆,回到原處 18 else: 19 dot(5) 20 Skip(-radius)#抬起畫筆,回到圓心 21 right(6)#回到圓心,方向旋轉6度 22 23 SetupClock(160)

2、添加指針
1 from turtle import * 2 from datetime import * 3 4 def Skip(step):#表盤不連續地畫圖 5 penup() 6 forward(step) 7 pendown() 8 9 def mkHand(name, length): 10 #注冊Turtle形狀,建立表針Turtle 11 #清空窗口,重置默認值 12 Skip(-length*0.1)#先回一點 13 begin_poly()#初始點 14 forward(length*1.1) 15 end_poly()#結束點 16 handForm = get_poly()#返回最后記錄的多邊形 17 register_shape(name, handForm)#寄存器形狀,安裝相應的多邊形 18 goto(0,0) 19 20 def Init(): 21 global secHand, minHand, hurHand, printer 22 mode("logo")# 重置Turtle指向北 23 24 #建立三個表針Turtle並初始化 25 mkHand("secHand", 125) 26 right(30) 27 mkHand("minHand", 110) 28 right(30) 29 mkHand("hurHand", 90) 30 31 secHand = Turtle() 32 secHand.shape("secHand") 33 minHand = Turtle() 34 minHand.shape("minHand") 35 hurHand = Turtle() 36 hurHand.shape("hurHand") 37 38 for hand in secHand, minHand, hurHand: 39 hand.shapesize(1, 1, 3) 40 hand.speed(0) 41 42 #建立輸出文字Turtle 43 printer = Turtle() 44 printer.hideturtle() 45 printer.penup() 46 47 #畫表框 48 def SetupClock(radius): 49 #建立表的外框 50 reset() 51 pensize(7) 52 for i in range(60): 53 Skip(radius)#跨越中間這段不畫 54 if i % 5 == 0: 55 forward(20) 56 Skip(-radius-20)#抬起畫筆,回到原處 57 else: 58 dot(5) 59 Skip(-radius)#抬起畫筆,回到圓心 60 right(6)#回到圓心,方向旋轉6度 61 62 Init() 63 tracer(False) 64 SetupClock(160)

3、時間
1 from datetime import * 2 from turtle import * 3 4 #時分秒 5 t = datetime.today() 6 print(t) 7 print(t.microsecond) 8 print(t.second) 9 second = t.second + t.microsecond*0.000001 10 minute = t.minute + second/60.0 11 hour = t.hour + minute/60.0 12 13 #星期 14 print(t.weekday()) 15 week = ["星期一", "星期二", "星期三", 16 "星期四", "星期五", "星期六", "星期日"] 17 print(week[t.weekday()]) 18 19 #年月日 20 y = t.year 21 m = t.month 22 d = t.day 23 # return "%s %d %d" % (y, m, d) 24 print(y,"-",m,"-",d) 25 26 tracer(False) 27 mode("logo")# 重置Turtle指向北 28 printer = Turtle() 29 printer.forward(65) 30 printer.write(week[t.weekday()], align="center",font=("Courier", 14, "bold"))#日期標在圖中 31 printer.back(130) 32 printer.write("%d-%d-%d"%(y,m,d),align="center",font=("Courier", 14, "bold"))#日期標在圖中


1 from datetime import * 2 from turtle import * 3 4 #時分秒 5 t = datetime.today() 6 print(t) 7 print(t.microsecond) 8 print(t.second) 9 second = t.second + t.microsecond*0.000001 10 minute = t.minute + second/60.0 11 hour = t.hour + minute/60.0 12 13 #星期 14 print(t.weekday()) 15 week = ["星期一", "星期二", "星期三", 16 "星期四", "星期五", "星期六", "星期日"] 17 print(week[t.weekday()]) 18 19 #年月日 20 y = t.year 21 m = t.month 22 d = t.day 23 # return "%s %d %d" % (y, m, d) 24 print(y,"-",m,"-",d) 25 26 tracer(False) 27 mode("logo")# 重置Turtle指向北 28 printer = Turtle() 29 printer.hideturtle() 30 printer.penup()#提起畫筆,便沒了那兩道軌跡 31 printer.forward(65) 32 printer.write(week[t.weekday()], align="center",font=("Courier", 14, "bold"))#日期標在圖中 33 printer.back(130) 34 printer.write("%s-%d-%d"%(y,m,d),align="center",font=("Courier", 14, "bold"))#日期標在圖中 35 printer.home() 36 tracer(True)

1 from datetime import * 2 from turtle import * 3 4 def Skip(step):#表盤不連續地畫圖 5 penup() 6 forward(step) 7 pendown() 8 9 def mkHand(name, length): 10 #注冊Turtle形狀,建立表針Turtle 11 #清空窗口,重置默認值 12 Skip(-length*0.1)#先回一點 13 begin_poly()#初始點 14 forward(length*1.1) 15 end_poly()#結束點 16 handForm = get_poly()#返回最后記錄的多邊形 17 register_shape(name, handForm)#寄存器形狀,安裝相應的多邊形 18 goto(0,0) 19 20 def Init(): 21 global secHand, minHand, hurHand, printer 22 mode("logo")# 重置Turtle指向北 23 right(90) 24 #建立三個表針Turtle並初始化 25 mkHand("secHand", 125) 26 right(30) 27 mkHand("minHand", 110) 28 right(30) 29 mkHand("hurHand", 90) 30 31 secHand = Turtle() 32 secHand.shape("secHand") 33 minHand = Turtle() 34 minHand.shape("minHand") 35 hurHand = Turtle() 36 hurHand.shape("hurHand") 37 38 for hand in secHand, minHand, hurHand: 39 hand.shapesize(1, 1, 3) 40 hand.speed(0) 41 42 #建立輸出文字Turtle 43 printer = Turtle() 44 printer.hideturtle() 45 printer.penup() 46 47 #畫表框 48 def SetupClock(radius): 49 #建立表的外框 50 reset() 51 pensize(7) 52 for i in range(60): 53 Skip(radius)#跨越中間這段不畫 54 if i % 5 == 0: 55 forward(20) 56 Skip(-radius-20)#抬起畫筆,回到原處 57 else: 58 dot(5) 59 Skip(-radius)#抬起畫筆,回到圓心 60 right(6)#回到圓心,方向旋轉6度 61 62 tracer(False) 63 Init() 64 SetupClock(160) 65 tracer(True) 66 67 #時分秒 68 t = datetime.today() 69 print(t) 70 print(t.microsecond) 71 print(t.second) 72 second = t.second + t.microsecond*0.000001 73 minute = t.minute + second/60.0 74 hour = t.hour + minute/60.0 75 76 77 #星期 78 print(t.weekday()) 79 week = ["星期一", "星期二", "星期三", 80 "星期四", "星期五", "星期六", "星期日"] 81 print(week[t.weekday()]) 82 83 #年月日 84 y = t.year 85 m = t.month 86 d = t.day 87 # return "%s %d %d" % (y, m, d) 88 print(y,"-",m,"-",d) 89 90 tracer(False) 91 #mode("logo")# 重置Turtle指向北 92 printer = Turtle() 93 printer.penup() 94 printer.hideturtle() 95 printer.forward(65) 96 printer.write(week[t.weekday()], align="center",font=("Courier", 14, "bold"))#日期標在圖中 97 printer.back(130) 98 printer.write("%d-%d-%d"%(y,m,d), align="center",font=("Courier", 14, "bold"))#日期標在圖中 99 tracer(True)

4、動態顯示

將時間和角度對應起來,換算到角度,然后和指針對應起來
1 from turtle import * 2 from datetime import * 3 4 def Skip(step):#表盤不連續地畫圖 5 penup() 6 forward(step) 7 pendown() 8 9 def mkHand(name, length): 10 #注冊Turtle形狀,建立表針Turtle 11 reset() 12 Skip(-length*0.1) 13 begin_poly()#多邊形第一個頂點 14 forward(length*1.1) 15 end_poly() 16 handForm = get_poly() 17 register_shape(name, handForm) 18 19 def Init(): 20 global secHand, minHand, hurHand, printer 21 mode("logo")# 重置Turtle指向北,為后續角度提供便利 22 #建立三個表針Turtle並初始化 23 mkHand("secHand", 125) 24 mkHand("minHand", 115) 25 mkHand("hurHand", 90) 26 secHand = Turtle() 27 secHand.shape("secHand") 28 minHand = Turtle() 29 minHand.shape("minHand") 30 hurHand = Turtle() 31 hurHand.shape("hurHand") 32 for hand in secHand, minHand, hurHand: 33 hand.shapesize(1, 1, 3) 34 hand.speed(0) 35 #建立輸出文字Turtle 36 printer = Turtle() 37 printer.hideturtle() 38 printer.penup() 39 40 #畫表框 41 def SetupClock(radius): 42 #建立表的外框 43 reset() 44 pensize(7) 45 for i in range(60): 46 Skip(radius)#跨越中間這段不畫 47 if i % 5 == 0: 48 forward(20) 49 Skip(-radius-20)#抬起畫筆,回到原處 50 else: 51 dot(5) 52 Skip(-radius)#抬起畫筆,回到圓心 53 right(6)#回到圓心,方向旋轉6度 54 55 def Week(t): 56 week = ["星期一", "星期二", "星期三", 57 "星期四", "星期五", "星期六", "星期日"] 58 return week[t.weekday()] 59 60 def Date(t): 61 y = t.year 62 m = t.month 63 d = t.day 64 return "%s %d %d" % (y, m, d) 65 66 def Tick(): 67 #繪制表針的動態顯示 68 t = datetime.today() 69 second = t.second + t.microsecond*0.000001 70 minute = t.minute + second/60.0 71 hour = t.hour + minute/60.0 72 secHand.setheading(6*second) 73 minHand.setheading(6*minute) 74 hurHand.setheading(30*hour) 75 76 tracer(False) 77 printer.forward(65) 78 printer.write(Week(t), align="center", 79 font=("Courier", 14, "bold")) 80 printer.back(130) 81 printer.write(Date(t), align="center", 82 font=("Courier", 14, "bold")) 83 printer.home() 84 85 tracer(True) 86 87 ontimer(Tick, 100)#100ms后繼續調用tick 88 89 def main(): 90 tracer(False)#不刷新,最后一次刷新,省時間 91 Init() 92 SetupClock(160) 93 tracer(True) 94 Tick() 95 mainloop() 96 97 if __name__ == "__main__": 98 main()

