python动态时钟

Python函数库众多,而且在不断更新,所以学习这些函数库最有效的方法,就是阅读Python官方文档。同时借助Google和百度。

本文介绍的turtle库对应的官方文档地址为:https://docs.python.org/3.5/library/turtle.html

绘制动态钟表的基本思路如下(面向对象的编程):

使用5个turtle对象

1个turtle:绘制外表盘

3个turtle:模拟表针行为

1个turtle:输出表盘上文字

根据实时时间使用ontimer()函数更新表盘画面,显示效果如下:

 

相关函数的使用在程序中进行了详细的注释,代码如下:

 

[python] view plain copy

  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", 135)  
  24.     mkHand("minHand",  110)  
  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. def SetupClock(radius):  
  41.     #建立表的外框  
  42.     reset()  
  43.     pensize(7)  
  44.     for i in range(60):  
  45.         Skip(radius)  
  46.         if i % 5 == 0:  
  47.             forward(20)  
  48.             Skip(-radius-20)  
  49.         else:  
  50.             dot(5)  
  51.             Skip(-radius)  
  52.         right(6)  
  53.            
  54. def Week(t):      
  55.     week = ["星期一""星期二""星期三",  
  56.             "星期四""星期五""星期六""星期日"]  
  57.     return week[t.weekday()]  
  58.    
  59. def Date(t):  
  60.     y = t.year  
  61.     m = t.month  
  62.     d = t.day  
  63.     return "%s %d %d" % (y, m, d)  
  64.    
  65. def Tick():  
  66.     #绘制表针的动态显示  
  67.     t = datetime.today()  
  68.     second = t.second + t.microsecond*0.000001  
  69.     minute = t.minute + second/60.0  
  70.     hour = t.hour + minute/60.0  
  71.     secHand.setheading(6*second) #设置朝向,每秒转动6度  
  72.     minHand.setheading(6*minute)  
  73.     hurHand.setheading(30*hour)  
  74.        
  75.     tracer(False)  #不显示绘制的过程,直接显示绘制结果  
  76.     printer.forward(65)  
  77.     printer.write(Week(t), align="center",  
  78.                   font=("Courier", 14, "bold"))  
  79.     printer.back(130)  
  80.     printer.write(Date(t), align="center",  
  81.                   font=("Courier", 14, "bold"))  
  82.     printer.back(50)  
  83.     printer.write("i_chaoren", align="center",  
  84.                   font=("Courier", 14, "bold"))  
  85.     printer.home()  
  86.     tracer(True)  
  87.    
  88.     ontimer(Tick, 1000)#1000ms后继续调用tick  
  89.    
  90. def main():  
  91.     tracer(False) #使多个绘制对象同时显示  
  92.     Init()  
  93.     SetupClock(160)  
  94.     tracer(True)  
  95.     Tick()  
  96.     mainloop()  
  97.    
  98. if __name__ == "__main__":         
  99.     main()  

你可能感兴趣的:(python动态时钟)