用turtle库绘制图形(clock)

简介: 用turtle库绘制图形(clock)

d86586b389464d2aa9ba8ef688272334.jpg


使用Turtle库绘制图形实例如下:


from turtle import *
from datetime import datetime
def jump(distanz, winkel=0):
    penup()
    right(winkel)
    forward(distanz)
    left(winkel)
    pendown()
def hand(laenge, spitze):
    fd(laenge * 1.15)
    rt(90)
    fd(spitze / 2.0)
    lt(120)
    fd(spitze)
    lt(120)
    fd(spitze)
    lt(120)
    fd(spitze / 2.0)
def make_hand_shape(name, laenge, spitze):
    reset()
    jump(-laenge * 0.15)
    begin_poly()
    hand(laenge, spitze)
    end_poly()
    hand_form = get_poly()
    register_shape(name, hand_form)
def clockface(radius):
    reset()
    pensize(7)
    for i in range(60):
        jump(radius)
        if i % 5 == 0:
            fd(25)
            jump(-radius - 25)
        else:
            dot(3)
            jump(-radius)
        rt(6)
def setup():
    global second_hand, minute_hand, hour_hand, writer
    mode("logo")
    make_hand_shape("second_hand", 125, 25)
    make_hand_shape("minute_hand", 130, 25)
    make_hand_shape("hour_hand", 90, 25)
    clockface(160)
    second_hand = Turtle()
    second_hand.shape("second_hand")
    second_hand.color("gray20", "gray80")
    minute_hand = Turtle()
    minute_hand.shape("minute_hand")
    minute_hand.color("blue1", "red1")
    hour_hand = Turtle()
    hour_hand.shape("hour_hand")
    hour_hand.color("blue3", "red3")
    for hand in second_hand, minute_hand, hour_hand:
        hand.resizemode("user")
        hand.shapesize(1, 1, 3)
        hand.speed(0)
    ht()
    writer = Turtle()
    # writer.mode("logo")
    writer.ht()
    writer.pu()
    writer.bk(85)
def wochentag(t):
    wochentag = ["Monday", "Tuesday", "Wednesday",
                 "Thursday", "Friday", "Saturday", "Sunday"]
    return wochentag[t.weekday()]
def datum(z):
    monat = ["Jan.", "Feb.", "Mar.", "Apr.", "May", "June",
             "July", "Aug.", "Sep.", "Oct.", "Nov.", "Dec."]
    j = z.year
    m = monat[z.month - 1]
    t = z.day
    return "%s %d %d" % (m, t, j)
def tick():
    t = datetime.today()
    sekunde = t.second + t.microsecond * 0.000001
    minute = t.minute + sekunde / 60.0
    stunde = t.hour + minute / 60.0
    try:
        tracer(False)  # Terminator can occur here
        writer.clear()
        writer.home()
        writer.forward(65)
        writer.write(wochentag(t),
                     align="center", font=("Courier", 14, "bold"))
        writer.back(150)
        writer.write(datum(t),
                     align="center", font=("Courier", 14, "bold"))
        writer.forward(85)
        tracer(True)
        second_hand.setheading(6 * sekunde)  # or here
        minute_hand.setheading(6 * minute)
        hour_hand.setheading(30 * stunde)
        tracer(True)
        ontimer(tick, 100)
    except Terminator:
        pass  # turtledemo user pressed STOP
def main():
    tracer(False)
    setup()
    tracer(True)
    tick()
    return "EVENTLOOP"
if __name__ == "__main__":
    mode("logo")
    msg = main()
    print(msg)
    mainloop()


运行结果如下:


869d98259d5947b38b59951389cdd851.png


相关文章
|
人工智能 安全 数据挖掘
计算机在石油化工领域的应用
计算机在石油化工领域的应用
|
Java 数据库连接 测试技术
Mybatis-PLUS详解
Mybatis-PLUS详解
460 0
|
安全 Java 关系型数据库
基于Java的超市进销存管理系统
基于Java的超市进销存管理系统
|
存储 消息中间件 监控
曹操出行基于Hologres+Flink的实时数仓建设
曹操出行实时计算负责人-林震对于曹操出行基于Hologres+Flink的实时数仓建设进行演讲
|
Java 数据安全/隐私保护
JavaWeb-Springboot图片裁剪
Springboot下,通过HTTP方式对图片进行裁剪
323 0
JavaWeb-Springboot图片裁剪
|
人工智能 安全 小程序
|
图形学
Unity3D 5.x 启动过程中 License Error 解决办法
Unity3D 5.x 启动过程中 License Error 解决办法
494 0
|
关系型数据库 MySQL Linux
Linux系统彻底卸载MySQL数据库
Linux系统彻底卸载MySQL数据库
1868 0
Linux系统彻底卸载MySQL数据库
|
JSON 测试技术 数据格式
pycharm中使用request和Pytest进行接口测试的方法
pycharm中使用request和Pytest进行接口测试的方法
619 0
 pycharm中使用request和Pytest进行接口测试的方法
|
分布式计算 资源调度 Hadoop
Hadoop核心组件之HDFS的安装与配置
Hadoop核心组件之HDFS的安装与配置
516 0
Hadoop核心组件之HDFS的安装与配置