python ——钟表

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()

 

posted on 2017-08-25 20:57  箬笠蓑衣  阅读(4326)  评论(0编辑  收藏  举报