首页 > 编程语言 >用Python画一只小兔子,祝您新年前途似锦,大展宏图

用Python画一只小兔子,祝您新年前途似锦,大展宏图

时间:2023-07-25 12:32:41浏览次数:34  
标签:10 rotate 15 Python 似锦 right 大展宏图 fill left


用Python画一只小兔子,祝您新年前途似锦,大展宏图

兔年到了,祝大家新年前途似锦!大展宏图!

2021牛年,我用Python画了一头金牛,参考:Python画金牛 2022虎年,我用Python画了一只小老虎,参考:Python画小老虎

今年是第三年,还是一样的方式,今年画一只小兔子,为大家送上祝福。

绘图过程录制成了如下视频,点击视频可以先看到效果。文末提供完整代码获取方式。

视频展示

用Python画一只小兔子

实现方法介绍

本文的绘图工具使用Python标准库turtle库,无需安装,导入即可使用。

部分函数用法介绍(对绘图函数了解可以跳过此部分):

画布设置

  • title(): 设置窗口的标题。
  • bgpic():设置背景图片。
  • setup(width, height, x, y): 设置窗口大小和窗口左上角在屏幕中的位置。
  • shape():设置鼠标的形状。
  • done(): 绘图结束后,不自动关闭窗口。

画笔设置

  • pencolor(color): 设置画笔颜色。
  • width(): 设置画笔宽度。
  • speed(int): 设置画笔的速度,传入1~10的数字,1最慢,10最快。传入其他值会更快,但是没有鼠标移动的动画效果。
  • penup(): 提起画笔,提起后移动画笔不会留下痕迹。
  • pendown(): 落下画笔,开始绘图前先将画笔落下。
  • setx(value): 设置画笔的x轴坐标。
  • sety(value): 设置画笔的y轴坐标。
  • towards(x, y): 设置画笔指向的点。
  • setheading(): 设置画笔的方向。与towards()配合可以设置画笔指向某个点,如setheading(towards(0, 0))可以设置画笔指向原点。
  • pos(): 返回画笔当前的坐标。鼠标移动一段时间后可以print()打印此函数获取鼠标位置。
  • heading(): 返回画笔当前的方向。

画笔操作

  • circle(radius[, extent=arc]): 画一个圆,传入圆的半径,根据画笔的方向控制圆心的位置,圆心与画笔的方向垂直。传入弧度值可以画出指定弧度的圆弧。
  • left(angle): 画笔左转,传入任意一个目标角度。
  • right(angle): 画笔右转。
  • forward(distance): 画笔前进一段距离。
  • backward(distance): 画笔后退一段距离。
  • goto(x, y): 移动画笔到指定坐标。

颜色填充

  • begin_fill(): 开始填充。
  • fillcolor(color): 设置图形中填充的颜色。
  • end_fill(): 结束填充。

具体画图时,调整画笔的起点,设置不同的转角度数和不同的前进长度,可以得到不同形状的弧线,用弧线构成完整的图形。

部分代码

# coding=utf-8
"""
作者:小斌哥ge
公众号: 小斌哥ge
微信:XiaoBinnGe-
发表时间:2023年1月
"""
from turtle import *
import time


def set_start(x, y, w=0.5, c='black'):
    penup()
    setx(x)
    sety(y)
    setheading(towards(0, 0))
    width(w)
    pencolor(c)
    pendown()
    speed(0)


def left_rotate(time, angle, length):
    for i in range(time):
        left(angle)
        forward(length)


def right_rotate(time, angle, length):
    for i in range(time):
        right(angle)
        forward(length)


def fill_color(color):
    def decorator_all(func):
        def wrapper(*args, **kwargs):
            begin_fill()
            func(*args, **kwargs)
            fillcolor(color)
            end_fill()
        return wrapper
    return decorator_all


def fill_color_patch(x, y, c='white'):
    set_start(x, y, 1, c=c)
    forward(1)


def draw_circle(radius, color, color2=''):
    if color2 == '':
        color2 = color
    penup()
    setheading(towards(0, 0))
    right(90)
    pencolor(color)
    pendown()
    begin_fill()
    circle(radius)
    fillcolor(color2)
    end_fill()


def draw_ear():
    # 左侧耳朵
    fill_color_patch(-50, 86, c='#9392B3')
    begin_fill()
    set_start(-50, 86, w=4, c='#9392B3')
    right_rotate(1, 174, 10)
    right_rotate(5, 5, 15)
    right_rotate(4, 6, 15)
    width(3)
    right_rotate(2, 4, 13)
    right_rotate(2, 5, 10)
    left_rotate(3, 9, 12)
    width(4)
    right_rotate(1, 128, 10)
    right_rotate(3, 9.5, 31)
    right_rotate(5, 7, 25)
    right_rotate(1, 80, 10)
    left_rotate(3, 7, 12)
    fillcolor('white')
    end_fill()
    width(3)
    right_rotate(1, 160, 5)
    left_rotate(1, 20, 10)
    left_rotate(3, 8, 20)
    width(4)
    left_rotate(1, 2, 15)
    left_rotate(5, 5, 15)
    left_rotate(4, 3, 15)
    fill_color_patch(-35, 105, c='#E6E6FA')
    begin_fill()
    set_start(-35, 105, w=1, c='#E6E6FA')
    right_rotate(1, 170, 10)
    right_rotate(3, 8, 25)
    right_rotate(3, 11, 23)
    right_rotate(1, 130, 20)
    right_rotate(5, 8, 25)
    goto(-35, 105)
    fillcolor('#E6E6FA')
    end_fill()
    fill_color_patch(-32, 110, c='#D6D2F6')
    begin_fill()
    set_start(-32, 110, w=1, c='#D6D2F6')
    right_rotate(1, 170, 10)
    right_rotate(3, 7, 23)
    right_rotate(3, 11, 20)
    right_rotate(1, 131, 20)
    right_rotate(5, 8, 23)
    goto(-32, 110)
    fillcolor('#D6D2F6')
    end_fill()
    set_start(-48.87, 85.22, w=3, c='#9392B3')
    setheading(195.67)
    right_rotate(1, 160, 5)
    left_rotate(1, 20, 10)
    left_rotate(3, 8, 20)
    width(4)
    left_rotate(1, 2, 15)
    left_rotate(5, 5, 15)
    left_rotate(4, 3, 15)
    # 右侧耳朵
    fill_color_patch(90, 67, c='#9392B3')
    begin_fill()
    set_start(90, 67, w=4, c='#9392B3')
    left_rotate(1, 180, 10)
    left_rotate(3, 5, 13)
    left_rotate(2, 8, 15)
    left_rotate(3, 6, 15)
    left_rotate(4, 5, 15)
    right_rotate(4, 5.5, 8)
    left_rotate(1, 132, 15)
    left_rotate(2, 8, 18)
    left_rotate(5, 5, 18)
    left_rotate(4, 4, 17)
    left_rotate(1, 70, 5)
    right_rotate(3, 5, 8)
    goto(90, 67)
    fillcolor('white')
    end_fill()
    left_rotate(1, 180, 5)
    right_rotate(1, 63, 10)
    left_rotate(4, 2, 12)
    right_rotate(3, 3, 16)
    width(3)
    right_rotate(3, 6, 15)
    right_rotate(4, 5, 13.5)
    fill_color_patch(90, 80, c='#E6E6FA')
    begin_fill()
    set_start(90, 80, w=1, c='#E6E6FA')
    left_rotate(1, 175, 10)
    left_rotate(4, 10, 12)
    left_rotate(4, 7, 15)
    right_rotate(4, 5, 9)
    left_rotate(1, 150, 15)
    left_rotate(4, 7.5, 15)
    left_rotate(2, 3, 15)
    right_rotate(2, 2, 10)
    left_rotate(2, 7, 12)
    goto(90, 80)
    fillcolor('#E6E6FA')
    end_fill()
    fill_color_patch(90, 85, c='#D6D2F6')
    begin_fill()
    set_start(90, 85, w=1, c='#D6D2F6')
    left_rotate(1, 175, 10)
    left_rotate(4, 10, 10)
    left_rotate(4, 6, 15)
    right_rotate(4, 5, 7)
    left_rotate(1, 153, 15)
    left_rotate(3, 9.5, 15)
    left_rotate(2, 2, 15)
    right_rotate(3, 0, 10)
    goto(90, 85)
    fillcolor('#D6D2F6')
    end_fill()
    set_start(90.00, 67.00, w=4, c='#9392B3')
    setheading(327.67)
    left_rotate(1, 180, 5)
    right_rotate(1, 63, 10)
    left_rotate(4, 2, 12)
    right_rotate(3, 3, 16)
    width(3)
    right_rotate(3, 6, 15)
    right_rotate(4, 5, 13.5)


def draw_cat():
    set_start(34, 141, w=1, c='#C65B03')
    draw_circle(5, '#C65B03', color2='')
    set_start(33.5, 139, w=1, c='#ED9C22')
    draw_circle(3, '#ED9C22', color2='')
    fill_color_patch(-23, 90, c='#850009')
    begin_fill()
    set_start(-23, 90, w=2, c='#850009')
    left_rotate(1, 80, 10)
    right_rotate(6, 4, 14.2)
    left_rotate(1, 105, 9)
    left_rotate(2, 8, 8)
    width(3)
    left_rotate(11, 12, 10)
    width(2)
    left_rotate(2, 12, 12)
    goto(-23, 90)
    fillcolor('#B80705')
    end_fill()
    fill_color_patch(46, 110, c='#850009')
    begin_fill()
    set_start(46, 110, w=3, c='#850009')
    right_rotate(1, 145, 9)
    left_rotate(2, 16, 8)
    width(2)
    left_rotate(3, 22, 2)
    left_rotate(3, 12, 9)
    goto(46, 110)
    fillcolor('#E50703')
    end_fill()
    fill_color_patch(-23, 90, c='#BE7728')
    begin_fill()
    set_start(-23, 90, w=2, c='#BE7728')
    left_rotate(1, 80, 10)
    right_rotate(6, 4, 14.2)
    left_rotate(1, 105, 9)
    left_rotate(2, 8, 8)
    width(3)
    left_rotate(1, 55, 10)
    left_rotate(2, 5, 15)
    left_rotate(3, 6.5, 16)
    width(2)
    left_rotate(1, 55, 10)
    left_rotate(2, 10, 8)
    goto(-23, 90)
    fillcolor('#E4C127')
    end_fill()
    fill_color_patch(20, 98, c='#DC960D')
    begin_fill()
    set_start(20, 98, w=1, c='#DC960D')
    left_rotate(1, 75, 5)
    left_rotate(2, 12, 5)
    left_rotate(3, 33, 4)
    left_rotate(3, 35, 1)
    right_rotate(3, 28, 2)
    left_rotate(3, 35, 3)
    right_rotate(3, 30, 2)
    left_rotate(3, 45, 2)
    left_rotate(1, 30, 2)
    right_rotate(3, 25, 1)
    left_rotate(3, 45, 2)
    left_rotate(1, 30, 2)
    goto(20, 98)
    fillcolor('#DC960D')
    end_fill()
    fill_color_patch(22, 99, c='#839D76')
    begin_fill()
    set_start(22, 99, w=1, c='#839D76')
    left_rotate(1, 25, 0)
    left_rotate(3, 30, 4)
    left_rotate(3, 30, 2)
    left_rotate(3, 30, 4)
    left_rotate(3, 30, 2)
    fillcolor('#839D76')
    end_fill()
    begin_fill()
    set_start(24, 99, w=1, c='#398640')
    left_rotate(1, 25, 0)
    left_rotate(3, 30, 2.5)
    left_rotate(3, 30, 2)
    left_rotate(3, 30, 2.5)
    left_rotate(3, 30, 2)
    fillcolor('#398640')
    end_fill()
    begin_fill()
    set_start(25.5, 101, w=1, c='#0ADBC9')
    left_rotate(1, 25, 0)
    left_rotate(3, 30, 1.8)
    left_rotate(3, 30, 1)
    left_rotate(3, 30, 1.8)
    left_rotate(3, 30, 1)
    fillcolor('#0ADBC9')
    end_fill()


def draw_head():
    fill_color_patch(46, 83, c='#9392B3')
    begin_fill()
    set_start(46, 83, w=4, c='#9392B3')
    left_rotate(1, 105, 10)
    right_rotate(3, 8, 20)
    right_rotate(3, 10, 22)
    right_rotate(1, 13, 15)
    left_rotate(3, 3, 9)
    left_rotate(2, 12, 6)
    left_rotate(1, 30, 5)
    left_rotate(2, 15, 3)
    right_rotate(1, 135, 8)
    right_rotate(3, 8, 8)
    left_rotate(1, 140, 8)
    left_rotate(2, 10, 8)
    right_rotate(1, 130, 8)
    right_rotate(5, 7.5, 7.5)
    left_rotate(1, 140, 5)
    left_rotate(2, 8, 5)
    right_rotate(1, 125, 5)
    right_rotate(5, 8, 6)
    goto(125, -130)
    set_start(125, -130, w=4, c='#9392B3')
    left_rotate(1, 78, 10)
    right_rotate(3, 5, 18)
    right_rotate(4, 6, 21)
    right_rotate(5, 5, 18)
    right_rotate(3, 7, 20)
    left_rotate(1, 15, 10)
    right_rotate(2, 5, 6)
    right_rotate(4, 7, 6.5)
    right_rotate(1, 130, 5)
    left_rotate(3, 11, 4.5)
    left_rotate(1, 140, 7)
    right_rotate(3, 12, 6)
    right_rotate(5, 5, 5)
    right_rotate(1, 130, 5)
    left_rotate(3, 5, 4)
    left_rotate(3, 13, 3)
    left_rotate(1, 120, 8)
    right_rotate(5, 10, 6.5)
    right_rotate(1, 95, 5)
    left_rotate(3, 12, 5)
    left_rotate(3, 10, 10)
    right_rotate(3, 5, 12)
    right_rotate(3, 2, 5)
    right_rotate(3, 5, 12)
    right_rotate(4, 5, 13)
    left_rotate(3, 6, 6)
    left_rotate(5, 13.5, 7)
    right_rotate(1, 158, 8)
    right_rotate(3, 7, 7)
    right_rotate(5, 15, 5)
    fillcolor('white')
    end_fill()


if __name__ == '__main__':
    title('前途似锦(公众号:小斌哥ge)')
    wide = 800
    height = 600
    screensize(wide, height, '#DC0058')
    setup(wide+30, height+30, 50, 10)
    shape(name='turtle')
    time.sleep(2)
    draw_ear()
    draw_cat()
    draw_head()
    # draw_face()
    # draw_mouth()
    # draw_eye()
    # draw_eyebrow()
    # draw_nose()
    # draw_cheek()
    # draw_forehead()
    # draw_foot()
    # draw_body()
    # draw_hand()
    # draw_clothes()
    # draw_jade()

    set_start(1000, 1000, 2.5)
    done()

绘图结果

用Python画一只小兔子,祝您新年前途似锦,大展宏图_python画图

代码获取

代码有1800行,可以用WX关注我,在后台回复关键字“前途似锦”获取完整代码。

声明:转载、二创等使用本文代码,请注明出处。



标签:10,rotate,15,Python,似锦,right,大展宏图,fill,left
From: https://blog.51cto.com/u_15792201/6844092

相关文章

  • php和python哪个更有用
    1、开发一个网站,后端用go语言,前端用PHP、Ruby还是python比较好...2、用半年的时间来开发一个新网站,应该选PHP还是Python?3、Python爬虫技术与php爬虫技术对比,哪个更有优势?4、python与php的区别是什么开发一个网站,后端用go语言,前端用PHP、Ruby还是python比较好...1......
  • Python分析调试神器VizTracer
     VizTracer 是一个这样的工具,它通过跟踪和可视化Python代码的执行过程,来帮助你对代码的理解。无需对源代码进行任何更改,VizTracer即可记录函数的入口/出口,函数参数/返回值以及任意变量,然后通过 Trace-Viewer 使用直观的谷歌前端界面来显示数据。VizTracerisalow-o......
  • 想知道python是什么,Python可以做什么呢?
    ​ python可以在数据爬虫、Web开发、人工智能开发、自动化运维和数据分析数据等领域进行应用。而且Python是跨平台语言,语法很简洁,对初学者十分友好。Python的应用用途:1、数据爬虫Python语言非常适合爬虫,通过requests库抓取网页数据,使用BeautifulSoup解析网页并清晰和组......
  • python for 跳出循环
    (99条消息)Python中跳出循环的两种方法_python跳出循环_在线码BUG的博客-CSDN博客#结束本次循环,继续下次循环foriinrange(1,10):ifi==3:continueelse:print('循环了',i,'次')#结束for循环foriinrange(1,10):ifi==3:br......
  • 【python】删除字符串中以\x开头的特殊字符
    1、场景  paramiko获取的字符串中有很多\x开头的字符,需要去除,获取原始输出  2、处理方法content="\x071cd\0x70"#使用unicode-escape编码集,将unicode内存编码值直接存储,并替换空白字符content=content.encode('unicode_escape').decode('utf-8').replace('','......
  • python数据分析项目有趣 新零售-无人智能售货机商务数据分析
        嗨喽!大家好,我是“流水不争先,争得滔滔不绝”的翀,18双非本科生一枚,正在努力!欢迎大家来交流学习,一起学习数据分析,希望我们一起好好学习,天天向上,目前是小社畜一枚~~项目名称新零售无人智能售货机1.数据探索1.1数据读取1.2设备编号1.3订单编号1.4支付状态1.5收款方2.......
  • 【python】unicode转中文
    1、处理方法text=u'\xe9\x95\xbf\xe5\x9f\x8e'text=text.encode('unicode-escape').decode('string_escape')print(text.decode('utf8')) 参考链接:(90条消息)python中unicode原样转成str,unicode-escape与string_escape_".......
  • Python随机函数random使用详解
    在python中用于生成随机数的模块是random,在使用前需要import,下面看下它的用法。random.randomrandom.random()用于生成一个0到1的随机符点数:0<=n<1.0注意: 以下代码在Python3.5下测试通过,python2版本可稍加修改描述random()方法返回随机生成的一个实数,它在(0,1)范围内。......
  • python flask 后台运行 关闭终端不退出
    方法一:$sudonohuppythonapp1c.py>log.txt2>&1&nohup允许运行从shell注销后可以在后台继续运行的命令/进程或shell脚本。log.txt:它将输出转发到该文件。2>&1:将所有标准错误移至标准输出。&:允许您在当前shell的后台运行命令/进程。方法二:uWsgi+......
  • Python - String Methodology
    >>>dir("")['__add__','__class__','__contains__','__delattr__','__dir__','__doc__','__eq__','__format__','__ge__','__getattribute__&......