世界杯正在火热进行中,世界杯的吉祥物拉伊卜也非常火。
本文用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
from turtle import *
import timedef set_start(x, y, w=0.5, c='black'):# 设置画笔开始的位置,绘制每一个部分的图形时,将鼠标移到起始点penup() # 提起画笔setx(x) # 设置画笔的x坐标sety(y) # 设置画笔的y坐标setheading(towards(0, 0)) # 默认设置画笔指向坐标原点0,0width(w) # 设置画笔的宽度pencolor(c) # 设置画笔的颜色pendown() # 落下画笔,开始绘图speed(0) # 设置画笔的速度,1-9依次越来越快,其他数字比9更快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_patch(x, y, c='white'):# 填充颜色时会找上一个图形的介绍点,此函数重置结束点,避免填充效果不准set_start(x, y, 1, c=c)forward(1)def draw_circle(radius, color, color2=''):# 绘制一个圆,radius是圆的半径,color是边框颜色,color2是填充颜色if color2 == '':color2 = colorpenup()setheading(towards(0, 0))right(90)pencolor(color)pendown()begin_fill()circle(radius) # 画圆fillcolor(color2)end_fill()def draw_football():# 足球# set_start(15, -157, w=1, c='black')# draw_circle(39, 'black', '#DCDCDC')fill_color_patch(39.34, -90.63)begin_fill()set_start(39.34, -90.63, w=2, c='black')setheading(124.2)left_rotate(20, 18, 12.2)goto(39.34, -90.63)fillcolor('#DCDCDC')end_fill()fill_color_patch(-25, -110)begin_fill()set_start(-25, -110, w=1, c='white')right_rotate(1, 160, 10)left_rotate(5, 20, 12)left_rotate(4, 18, 12)pencolor('black')left_rotate(1, 35, 12)left_rotate(7, 18, 12.1)goto(-25, -110)fillcolor('white')end_fill()fill_color_patch(-25, -108)begin_fill()set_start(-25, -108, w=1, c='black')right_rotate(1, 20, 4)right_rotate(2, 10, 3)left_rotate(1, 35, 5)left_rotate(1, 165, 5)right_rotate(2, 15, 3)goto(-25, -108)fillcolor('black')end_fill()fill_color_patch(-16, -101)begin_fill()set_start(-16, -101, w=1, c='black')right_rotate(1, 35, 8)right_rotate(1, 140, 4)left_rotate(2, 21, 2)left_rotate(2, 8, 4.5)right_rotate(1, 105, 8)right_rotate(1, 120, 3)left_rotate(3, 15, 4)goto(-16, -101)fillcolor('black')end_fill()fill_color_patch(-10, -93)begin_fill()set_start(-10, -93, w=1, c='black')left_rotate(1, 90, 4)right_rotate(1, 135, 5)right_rotate(2, 3, 7)right_rotate(1, 60, 3)right_rotate(1, 135, 5)left_rotate(3, 10, 4)goto(-10, -93)fillcolor('black')end_fill()fill_color_patch(6, -82)begin_fill()set_start(6, -82, w=1, c='black')right_rotate(1, 50, 4)right_rotate(1, 60, 6)right_rotate(2, 3, 7)right_rotate(1, 130, 4)right_rotate(1, 60, 5)left_rotate(3, 8, 4)goto(6, -82)fillcolor('black')end_fill()fill_color_patch(30, -88)begin_fill()set_start(30, -88, w=1, c='black')right_rotate(1, 130, 5)right_rotate(1, 15, 5)right_rotate(1, 150, 5)goto(30, -88)fillcolor('black')end_fill()fill_color_patch(25, -89)begin_fill()set_start(25, -89, w=1, c='black')right_rotate(1, 140, 8)right_rotate(1, 95, 4)left_rotate(2, 25, 6)right_rotate(1, 130, 8)right_rotate(1, 110, 3)left_rotate(3, 20, 4)goto(25, -89)fillcolor('black')end_fill()fill_color_patch(20, -106)begin_fill()set_start(20, -106, w=1, c='black')right_rotate(1, 180, 8)right_rotate(1, 120, 4)left_rotate(3, 18, 5.8)right_rotate(1, 120, 8)right_rotate(1, 110, 3)left_rotate(3, 14, 5)goto(20, -106)fillcolor('black')end_fill()fill_color_patch(-8, -117)begin_fill()set_start(-8, -117, w=1, c='black')right_rotate(1, 100, 8)right_rotate(1, 115, 4)left_rotate(2, 16, 5)left_rotate(1, 22, 6)right_rotate(1, 125, 8)right_rotate(1, 120, 3)left_rotate(1, 25, 4)left_rotate(3, 15, 4)goto(-8, -117)fillcolor('black')end_fill()fill_color_patch(-12, -137)begin_fill()set_start(-12, -137, w=1, c='black')right_rotate(1, 145, 8)right_rotate(1, 148, 4)left_rotate(2, 18, 3.2)right_rotate(1, 55, 7)right_rotate(1, 165, 3)left_rotate(3, 20, 3)goto(-12, -137)fillcolor('black')end_fill()fill_color_patch(-6, -144)begin_fill()set_start(-6, -144, w=1, c='black')right_rotate(1, 35, 6)right_rotate(1, 105, 4)left_rotate(3, 16, 5.5)right_rotate(1, 130, 5)right_rotate(1, 78, 3)left_rotate(3, 5, 4)goto(-6, -144)fillcolor('black')end_fill()fill_color_patch(23, -115)begin_fill()set_start(23, -115, w=1, c='black')right_rotate(1, 60, 8)right_rotate(1, 120, 4)left_rotate(3, 12, 5.3)right_rotate(1, 100, 8)right_rotate(1, 130, 3)left_rotate(3, 15, 5)goto(23, -115)fillcolor('black')end_fill()fill_color_patch(32, -133)begin_fill()set_start(32, -133, w=1, c='black')right_rotate(1, 140, 6)right_rotate(1, 110, 4)left_rotate(3, 8, 5)right_rotate(1, 80, 7)right_rotate(1, 140, 3)left_rotate(3, 14, 6)goto(32, -133)fillcolor('black')end_fill()fill_color_patch(39, -135)begin_fill()set_start(39, -135, w=1, c='black')right_rotate(1, 30, 7)right_rotate(1, 80, 3)left_rotate(3, 20, 2.2)right_rotate(1, 160, 5)right_rotate(1, 60, 3)left_rotate(2, 15, 3)goto(39, -135)fillcolor('black')end_fill()fill_color_patch(14, -153)begin_fill()set_start(14, -153, w=1, c='black')right_rotate(1, 90, 7)right_rotate(1, 130, 3.5)right_rotate(1, 60, 3)goto(14, -153)fillcolor('black')end_fill()if __name__ == '__main__':title('世界杯吉祥物拉伊卜Laeeb(公众号:小斌哥ge)')wide = 600height = 500screensize(wide, height, '#FF0049')setup(wide+30, height+30, 100, 50)shape(name='turtle')time.sleep(2)# draw_body()# draw_head()# draw_mouth()# draw_eye()# draw_cap()# draw_hair()draw_football()# draw_clothes()set_start(1000, 1000, 1)done()
代码获取
代码有1000多行,可以用WX关注我,在后台回复关键字“世界杯”获取完整代码。
声明:转载、二创等使用本文代码,请注明出处。
预告:过年前一周左右会更新一个小兔子的绘图视频,敬请关注。期待你的一键三连。
相关阅读
用Python标准库turtle画一只老虎,祝您新年虎虎生威,大吉大利!