抖音上比较有趣的罗盘时钟,今天用turtle来画一下,基本功能实现了,拿来练习一下turtle,感觉还可以吧

turtle的安装
sudo apt-get install python3-tk
罗盘时钟
思路就是,绘制三个圆,在圆周填充字符,充当仪表,以当前时间为起点,然后定时重新绘制图形

所以本例实现看着有点卡顿的感觉。

代码实现:

import turtle
from datetime import *
 
# 抬起画笔,向前运动一段距离放下
def Skip(step):
    turtle.penup()
    turtle.forward(step)
    turtle.pendown()
  
 
def drawCircle(content,content_len,init_data,init_data_type,circle_radius,circle_radius_step,color,font_size):
    '''
    content:传入的数组,代表要画的圆上面写的内容,比如1-12月
    content_len:数组长度,用这个元素来做循环,便于调整每次的偏置角度
    init_data: x轴正方向显示当前时间,这个数据就是当前时间
    init_data_type:代表这个是什么类型的,时,分,秒之类的
    circle_radius:圆的半径
    circle_radius_step: 圆环上的数据根据半径和这个长度结合写上内容
    color: 画笔颜色
    '''
    #turtle.pos()
    turtle.home()
    #turtle.mode("logo")
    turtle.pensize(3)
    turtle.pencolor(color)
    turtle.fillcolor('#33BB00')
 
    #turtle.right(90)
    # turtle.right(-360/content_len)
    # Skip(circle_radius+circle_radius_step+10*3)
    # turtle.write(' ', align="center", font=("Courier", font_size,'bold'))
    # Skip(-circle_radius-circle_radius_step-10*3)
    # #turtle.right(360/content_len)
 
 
    Skip(circle_radius+circle_radius_step+10*3)
    turtle.write(init_data_type, align="center", font=("Courier", font_size,'bold'))
    Skip(-circle_radius-circle_radius_step-10*3)
 
    #turtle.right(-90)
 
 
    initdata_index=content.index(init_data)
    for i in range(initdata_index,content_len):
        Skip(circle_radius)
        fantilen=len(content[i])
        if i == initdata_index:
            turtle.forward(75)
            turtle.forward(-90)
            turtle.forward(15)
 
        for name in range(fantilen):
            turtle.write(content[i][name], align="center", font=("Courier", font_size))
            Skip(15)
        Skip(-15*fantilen)
        Skip(-circle_radius)
        turtle.left(360/content_len)
    for i in range(initdata_index):
        Skip(circle_radius)
        fantilen=len(content[i])
        for name in range(fantilen):
            turtle.write(content[i][name], align="center", font=("Courier", font_size))
            Skip(15)
        Skip(-15*fantilen)
        Skip(-circle_radius)
        turtle.left(360/content_len)
 
 
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  runclock():
    turtle.reset()
    t = datetime.today()
    print(t)
    second = t.second #+ t.microsecond * 0.000001
    minute = t.minute #+ second / 60.0
    hour = t.hour# + minute / 60.0
 
 
    Traditional_Chinese= [' ','壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', 
    '拾', '拾壹', '拾贰', '拾叁', '拾肆', '拾伍', '拾陆', '拾柒', '拾捌', '拾玖', 
 '贰拾', '贰拾壹', '贰拾贰', '贰拾叁', '贰拾肆', '贰拾伍', '贰拾陆', '贰拾柒', '贰拾捌', '贰拾玖',
 '叁拾', '叁拾壹', '叁拾贰', '叁拾叁', '叁拾肆', '叁拾伍', '叁拾陆', '叁拾柒', '叁拾捌', '叁拾玖',
 '肆拾', '肆拾壹', '肆拾贰', '肆拾叁', '肆拾肆', '肆拾伍', '肆拾陆', '肆拾柒', '肆拾捌', '肆拾玖',
 '伍拾', '伍拾壹', '伍拾贰', '伍拾叁', '伍拾肆', '伍拾伍', '伍拾陆', '伍拾柒', '伍拾捌', '伍拾玖']
    Simplified_Chinese=[' ','一', '二', '三', '四', '五', '六', '七', '八', '九', '十',
'十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九',
'二十','二十一', '二十二', '二十三', '二十四', '二十五', '二十六', '二十七', '二十八', '二十九',
 '三十','三十一', '三十二', '三十三', '三十四', '三十五', '三十六', '三十七', '三十八', '三十九', 
  '四十','四十一', '四十二', '四十三', '四十四', '四十五', '四十六', '四十七', '四十八', '四十九', 
'五十', '五十一', '五十二', '五十三', '五十四', '五十五', '五十六', '五十七', '五十八', '五十九' 
]
 
    hours= ['壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖','拾', '拾壹','拾贰',
    '拾叁', '拾肆', '拾伍', '拾陆', '拾柒', '拾捌', '拾玖',  '贰拾', '贰拾壹', '贰拾贰', '贰拾叁', '贰拾肆']
    Simplified_hours=['一', '二', '三', '四', '五', '六', '七', '八', '九', '十',
'十一', '十二', '十三', '十四', '十五', '十六', '十七', '十八', '十九',
'二十' ,'二十一', '二十二', '二十三', '二十四']
 
    drawCircle(Simplified_Chinese,len(Simplified_Chinese),Simplified_Chinese[second],'秒',250,25,'blue',10)
    drawCircle(Simplified_Chinese,len(Simplified_Chinese),Simplified_Chinese[minute],'分',170,20,'green',10)
    drawCircle(Simplified_hours,len(Simplified_hours),Simplified_hours[hour-1],'时',80,15,'red',10)
 
    printer = turtle.Turtle()
    # 隐藏画笔的turtle形状
    printer.hideturtle()
    printer.color('#11CCFF')
    printer.right(-90)
    printer.penup()
    printer.forward(40)
    printer.write(Week(t), align="center",font=("Courier", 10, "bold"))
    printer.back(80)
    printer.write(Date(t), align="center",font=("Courier", 14, "bold"))
    print(Week(t),Date(t))
    printer.right(90)
    turtle.ontimer(runclock, 1000)
 
 
 
def main():
    # 打开/关闭龟动画,并为更新图纸设置延迟。
    turtle.tracer(False)
    ts = turtle.getscreen()
    ts.bgcolor("black")
 
    runclock()
    turtle.mainloop()     
if __name__ == "__main__":
    main()

常用方法
下面是turtle常用的一些用法

1.forward() | fd():向前移动指定的距离。参数:一个数字(integer or float))。

turtle.forward(25)

2.backward() | bk() | back():向后移动指定的距离。参数:一个数字(integer or float))。

turtle.backward(30)

3..right() | rt():以角度单位向右转动。参数:一个数字(integer or float))。单位默认为度数,可以通过degrees()和radians()进行设置。

turtle.right(45)

4.left() | lt():以角度单位向左转动。参数:一个数字(integer or float))。单位默认为度数,可以通过degrees()和radians()进行设置。

turtle.left(45)

5.goto() | steps() | setposition():移动到绝对位置,如果笔落下,画线,不改变方向。参数:x-一个数字或一对数字。y-一个数字或None。

turtle.setpos(60,30)
    #60.00,30.00)

6.setx():设置第一个坐标的值即X方向。参数:一个数字(integer or float))。

turtle.setx(10)
    #(10.00,0.00)

7.sety():设置第二个坐标的值即Y方向。参数:一个数字(integer or float))。

turtle.sety(10)
    #(0.00,10.00)

8.setheading() | seth(): 将方向设置为to_angle.就是东西南北方向。具体如下:

标准模式:0 - 东  90 - 北 180 - 西 270 - 南  标志模式 0- 北   90- 东    180- 南    270 - 西

turtle.setheading(90)

9.home() : 移动到原点 - 坐标(0,0):并将其标题设置为其起始方向(取决于模式)。

turtle.home()
    # (0.00,0.00)

10.circle():绘制一个给定半径的圆。参数:radius-一个数字(半径,如果值为正则逆时针,负数为顺时针),extent-一个数字()steps- 执行的步数。

turtle.circle(120,180,5)

11.dot() :用颜色画出一个直径大小的圆点。参数:size-一个大于1的整数,可None。默认用的是pensize+4和2*pensize的最大值,color-颜色值

turtle.dot(20, "blue")

12.stamp():将当前位置上的形状复制到画布上返回stamp_id.可以调用,可以删除。

turtle.stamp()

13.clearstamp():删除stamp()返回来的值。参数:stampid。

14.clearstamps():删除全部stamp()的值。参数:stampid。

15.undo():撤销最后的动作。

16.speed():将速度设置为0..10范围内整数。如果没有参数,则返回当前速度。如果大于10或者小于0.5,则速度设置为0 。

“最快”:0 :直接成图,没有动画效果
    “快”:10:大概一秒
    “正常”:6:
    “慢”:3
    “最慢”:1

17:position() | pos(): 返回当前的位置。

turtle.pos()
    # (0.00,0.00)

18.towards(): 返回当前位置同指定位置之间的角度。参数:x-一个数字或一对数字或一个实例的向量,y-如果x是数字,则为数字,否则为None。

turtle.goto(10,10)
    tw = turtle.towards(0,0)
    print(tw)
    # 225

19.xcor():返回x坐标。

ycor():返回y坐标。

20.heading(): 返回当前的方向值。

21.distance():返回x,y两个点的直线距离

22.degrees():设置一整圈的度数。默认是360度。

23.radians():将角度测量单位设置为弧度。相当于 degrees(2*math.pi)

24.pendown() | pd() | down():放下笔,移动的时候绘图。

25.penup() | pu() | up():将提起笔,移动时无图。

26.pensize():设置线条的粗细。参数:width-一个正数

27.pen():使用键值对设置笔的属性:

“shown”: True/False
    “pendown”: True/False
    “pencolor”: 颜色字符串或者颜色值
    “fillcolor”: 颜色字符串或者颜色值
    “pensize”: 正数
    “speed”: 速度范围为0..10的数字
    “resizemode”: “auto” or “user” or “noresize”
    “stretchfactor”: (positive number, positive number)
    “outline”: 正数
    “tilt”: 正数

28.isdown():如果笔停止返回True,反之False

29.pencolor():设置笔的颜色。

30.fillcolor():笔的填充色。

31.color():同时设置pencolor和fillcolor

32.filling():返回fillstate状态,如果填充则返回True,反之False。

33.begin_fill():在绘制要填充的形状前调用。当然在调用完还需要end_fill()。

34.reset():重置,将屏幕中的图纸删除,重新居中并将所有变量设置为默认值。

35.clear():删除图纸。对属性不做操作。

36.write():写文本。参数:arg-要写入的对象。move-是否移动。align-对齐方式:left,right,center。font-字体。fontname,fontsize,fonttype。

37.hideturtle() | ht() :删隐藏乌龟的形状,在做复杂绘图的时候隐藏的时候有利于提高绘图速度。

38.showturtle() | st():显示乌龟的形状。

39.isvisible():乌龟是否可见。如果可见返回True,反之则False。

40.shape():设置乌龟的图形形状,取值:“arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”

41.isvisible():乌龟是否可见。如果可见返回True,反之则False。

42.resizemode():参数:rmode取值:"auto","user","noresize".

43.shapesize() | turtlesize() : 返回笔的属性。

44.shearfactor(): 设置或者返回但钱的剪切因子。

45.tilt():旋转由turtle shape角度从当前的倾斜角度。

46.settiltangle():无论当前的倾斜角度如何,旋转乌龟指向 angle 指定的方向。参数:angle -数字。已弃用

47.tiltangle():设置或者返回当前的倾斜角度。参数:angle - 数字

48.shapetransform():设置或返回乌龟的形状的当前转换矩阵。

49.get_shapepoly():返回当前形状的坐标。

50.onclick():鼠标点击事件。参数:fun-一个带有两个参数的函数,这些参数将与画布上单击点的坐标一个调用。num-鼠标按钮的数量,默认为1(左键)。add- True的时候将添加新的绑定。否则替换以前的绑定。

51.onrelease():鼠标释放事件。参数同点击事件。

52.ondrag():鼠标移动事件。参数同点击事件。

53.begin_poly(): 开始记录多边形的顶点。

54.end_poly():停止记录多边形的顶点。

55.get_poly():返回最后记录的多边形。

56.clone():创建并返回具有相同位置等等属性的乌龟克隆。

57.getturtle() | getpen() :获取trutle对象本身。

58.getscreen():返回正在绘制的对象。

59.setundobuffer(): 设置或禁用中断器。参数: size-整数。如果大小是None,则禁用缓冲区。

60.undobufferentries():返回undobuffer中的条目数。

61.bgcolor():设置或者返回当前的TurtleScreen的背景颜色。

62.bgpic():设置背景图片。参数: picname-文件名。

62.delay(): 设置或返回以毫秒为单位的绘制延迟,延迟越大,绘图越慢。

63.ontimer():定时器。

64.mainloop() | done() :开始循环 。

65.textinput() | numinput():弹出一个输入字符串和数字的窗口。

66.mode(): 三种方式:“standard”, “logo” or “world”

正常时钟
# coding=utf-8
 
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.color('black')
    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)
    turtle.pencolor("#ff5500")
    turtle.fillcolor("green")
 
    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(65)
 
    printer.write('Fengqi', align="center",
                  font=("Courier", 14, "bold"))
 
    printer.back(65)
    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)
    ts = turtle.getscreen()
    ts.bgcolor("#BBBBBB")
    Init()
    SetupClock(160)
    turtle.tracer(True)
    Tick()
    turtle.mainloop()
 
 
if __name__ == "__main__":
    main()

————————————————
版权声明:本文为CSDN博主「枫奇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qiqiyingse/article/details/90440377

python实现抖音上比较火的罗盘时钟相关推荐

  1. Python在抖音上也火?

    最近无意中刷抖音 刷到了一个Python工程师的工资条 然后我默默的打开看了 然后我默默的关闭了 emmm..... 后悔为什么我当时没有坚持做开发 相信每一个人都想拿着高工资 做着轻松的工作 而如今 ...

  2. 都在写抖音上的网红罗盘时钟,我也用vue仿写一个

    先看效果 直接上代码 <template><div class="container"><div class="dateTimeBox ye ...

  3. python如何写生日快乐说说_抖音上很火的生日句子,适合过生日发的高逼格

    抖音上很火的生日时发的句子,还有给自己生日的高逼格祝福,码起来,迟早会用到. 抖音上很火的生日句子,适合过生日发的高逼格祝福: 1. 没有零点的生日祝福 没有煽情的语录 感恩所有 都是馈赠和成长 祝自 ...

  4. android 字符画,抖音上很火的字符画 Android 实现 | 视频转换实现

    作者:Line_cut_feng 链接:https://www.jianshu.com/p/a14f1ac558e1 之前我推送过抖音上很火的字符画 Android 实现,当时文末:按说拿到ascii ...

  5. python处理视频动漫化_用Python实现抖音上的“人像动漫化”特效,原来这么简单...

    原标题:用Python实现抖音上的"人像动漫化"特效,原来这么简单 作者 | 黄伟呢 来源 | 数据分析与统计学之美 前几天,女友拉着我和她玩儿抖音,就是这个 人像动漫化的操作,顿 ...

  6. 抖音上很火的3D立体动态相册

    带背景音乐网站效果: http://www.fengzhao.icu/photos/html/%E6%8A%96%E9%9F%B3%E4%B8%8A%E5%BE%88%E7%81%AB%E7%9A%8 ...

  7. python 动漫卡通人物图片大全_用Python实现抖音上的“人像动漫化”特效,原来这么简单...

    原标题:用Python实现抖音上的"人像动漫化"特效,原来这么简单 作者 | 黄伟呢 来源 | 数据分析与统计学之美 前几天,女友拉着我和她玩儿抖音,就是这个 人像动漫化的操作,顿 ...

  8. 生日祝福卡片 html,抖音上很火的生日祝福语大全 过生日暖心写给女生祝福内容...

    愿你三冬暖,愿你春不寒.愿你天黑有灯,下雨有伞.愿你路上有良人伴,来看看抖音上很火的生日祝福语大全. 抖音上很火的生日祝福语大全 1.愿如梁上燕,岁岁常相见.生日快乐! 2.在你永远与春天接壤的梦幻里 ...

  9. 抖音高贵气质的签名_抖音上很火的个性签名

    抖音的个性签名是一个让大家一眼就可以了解该账号的展示方式,同时在抖音里经常会有一些账号因为个性签名变火,这里我们就整理了一些在抖音上很火的个性签名,大家可以参考一下! 1.尊严这种东西,你得有实力扞卫 ...

最新文章

  1. html增加点击进入,html中实现回车或点击进入-----Mr.Zhang
  2. python程序_正确配置Python应用程序
  3. iOS之深入解析高阶容器的原理和应用
  4. Managed keyedState中的ValueStateDescriptor与MapStateDescriptor
  5. async-await原理解析
  6. python 查询包_查找Python包的依赖包(语句)
  7. (32)FPGA面试技能提升篇(EMMC)
  8. 关于SSM项目中配置文件的一些心得
  9. linux redis 数据迁移,redis cluster 迁移数据
  10. GoFrame v1.6.0 发布,Go 应用开发框架
  11. Android 意图(Intent) 理论详解
  12. 信息安全管理体系ISO27001IT服务管理体系ISO20000(转)
  13. 《穷查理宝典》思维导图
  14. 忆享科技聚焦|数字经济、视频云、AI数字人、全球5G用户……行业热点资讯一览
  15. Android8.thumbnails,Android Thumbnail 攻略
  16. java开发经典文章
  17. 【python基础】字符串总结
  18. Flink之Source
  19. IntelliJ IDEA - 闪退解决方案
  20. 2006中国商业网站100强 《互联网周刊》

热门文章

  1. linux vi后不保存退出,linux下退出VI的方法:不保存退出
  2. 插值和拟合MATLAB
  3. 不熟悉的四级核心词汇(四)
  4. 在百度搜索结果中屏蔽CSDN
  5. Dovecot的API简单学习使用
  6. 植物大战僵尸java圣诞版,植物大战僵尸圣诞版-植物大战僵尸2圣诞节版v1.9.1 安卓版-腾牛安卓网...
  7. ##求助!Python编程从入门到实践 外星人飞船问题
  8. 内核模式 vs 用户模式
  9. android上hdmi投屏TV未铺满,让4K电视满血重生 手机投屏体验比一比
  10. 潘震seo教程:总结seo毒害案例