您现在的位置是:门户> 编程语言> Python

python使用turtle库绘制时钟
2021-06-08 20人围观 0条评论
简介这篇文章主要为大家详细介绍了python使用turtle库绘制时钟,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

    本文介绍的turtle库对应的官方文档地址

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

    使用5个turtle对象
    1个turtle:绘制外表盘
    3个turtle:模拟表针行为
    1个turtle:输出表盘上文字

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

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

    # -*- coding: utf-8 -*-
    """
    Created on Fri Jan 12 10:43:55 2018
    
    @author: Administrator
    """
    
    from turtle import *
    from datetime import *
    
    def skip(step):
      penup()
      forward(step)
      pendown()
    
    def mkhand(name,length):
      #注册turtle形状,建立表针turtle
      reset()
      skip(-length*0.1)
      begin_poly()
      forward(length*1.1)
      end_poly()
      handform=get_poly()
      register_shape(name,handform)
    
    def init():
      global sechand,minhand,hurhand,printer
      mode("logo")
      #重置turtle指向北
      #建立三个表针turtle并初始化
      mkhand("sechand",125)
      mkhand("minhand",130)
      mkhand("hurhand",90)
      sechand=Turtle()
      sechand.shape("sechand")
      minhand=Turtle()
      minhand.shape("minhand")
      hurhand=Turtle()
      hurhand.shape("hurhand")
      for hand in sechand,minhand,hurhand:
        hand.shapesize(1,1,3)
        hand.speed(0)
      #建立输出文字turtle
      printer = Turtle()
      printer.hideturtle()
      printer.penup()
    
    def setupclock(radius):
      #建立表的外框
      reset()
      pensize(7)
      for i in range(60):
        skip(radius)
        if i %5==0:
          forward(20)
          skip(-radius-20)
        else:
          dot(5)
          skip(-radius)
        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+second/60.0
      sechand.setheading(6*second)
      minhand.setheading(6*minute)
      hurhand.setheading(30*hour)
      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()
      tracer(True)
      ontimer(tick,100)#100ms后继续调用tick
    
    def main():
      tracer(False)
      init()
      setupclock(160)
      tracer(True)
      tick()
      mainloop()
    main()

    运行结果

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

分享:

文章评论

    • wxpython 学习笔记 第一天
    • python文本数据处理学习笔记详解