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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM