使用turtle库制作时钟小程序

第一步:导入模块
import turtle
from datetime import *

第二步:抬起画笔,向前运动一段距离放下
def Skip(step):
turtle.penup()
turtle.forward(step)
turtle.pendown()

def mkHand(name, length):
# 注册Turtle形状,建立表针Turtle
turtle.reset()
Skip(-length * 0.1)
# 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。
turtle.begin_poly()
turtle.forward(length * 1.1)
# 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。
turtle.end_poly()
# 返回最后记录的多边形。
handForm = turtle.get_poly()
turtle.register_shape(name, handForm)

def Init():
global secHand, minHand, hurHand, printer
# 重置Turtle指向北
turtle.mode("logo")
# 建立三个表针Turtle并初始化
mkHand("secHand", 135)
mkHand("minHand", 125)
mkHand("hurHand", 90)
secHand = turtle.Turtle()
secHand.shape("secHand")
minHand = turtle.Turtle()
minHand.shape("minHand")
hurHand = turtle.Turtle()
hurHand.shape("hurHand")

for hand in secHand, minHand, hurHand:
    hand.shapesize(1, 1, 3)
    hand.speed(0)

# 建立输出文字Turtle
printer = turtle.Turtle()
# 隐藏画笔的turtle形状
printer.hideturtle()
printer.penup()

def SetupClock(radius):
# 建立表的外框
turtle.reset()
turtle.pensize(7)
for i in range(60):
Skip(radius)
if i % 5 == 0:
turtle.forward(20)
Skip(-radius - 20)

        Skip(radius + 20)
        if i == 0:
            turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
        elif i == 30:
            Skip(25)
            turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
            Skip(-25)
        elif (i == 25 or i == 35):
            Skip(20)
            turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
            Skip(-20)
        else:
            turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
        Skip(-radius - 20)
    else:
        turtle.dot(5)
        Skip(-radius)
    turtle.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 + minute / 60.0
secHand.setheading(6 * second)
minHand.setheading(6 * minute)
hurHand.setheading(30 * hour)

turtle.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()
turtle.tracer(True)

# 100ms后继续调用tick
turtle.ontimer(Tick, 100)

def main():
# 打开/关闭龟动画,并为更新图纸设置延迟。
turtle.tracer(False)
Init()
SetupClock(160)
turtle.tracer(True)
Tick()
turtle.mainloop()

if name == "main":
main()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • turtle绘图的基础知识: 1.画布 参数分别为画布的宽(单位像素), 高, 背景颜色。如:turtle.scr...
    JackHCC阅读 8,769评论 0 4
  • python之turtle库学习 作者:鎏嫣宫守护来源:CSDN原文:https://blog.csdn.net/...
    jianshuxu阅读 4,773评论 1 1
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 12,178评论 0 10
  • turtle绘图的基础知识: 1. 画布(canvas) 画布就是turtle为我们展开用于绘图区域,我们可以设置...
    L_8789阅读 1,283评论 0 0
  • Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原...
    yeszao阅读 8,233评论 1 5

友情链接更多精彩内容