万圣节
万圣节又叫诸圣节,在每年的11月1日,是西方的传统节日,作为一个程序员怎么能不庆祝一下呢,接下来就利用 Python 中的 turtle 库画一个南瓜头出来:
turtle库常用函数
函数 | 说明 |
---|---|
forward(distance) | 画笔向前移动distance距离 |
backforward(distance) | 画笔向后移动distance距离 |
right(degree) | 绘制方向向右旋转degree度 |
exitonclick() | 点击关闭图形窗口 |
penup() | 抬起画笔,之后移动画笔不绘制形状 |
pendown() | 落下画笔,之后移动画笔绘制形状 |
pensize() | 设置画笔宽度 |
pencolor() | 设置画笔颜色 |
其实 turtle 用起来并没有那么复杂,可以看到这些函数和我们人类写字画画是很类似的一个过程,比如 抬起画笔,然后移动画笔,再落下画笔。下面我们开始写个小例子。
图片准备
为了恐怖一点,我找了一张图片当作背景图:
png 格式的哦
我们要在这张图上画上一个这样的南瓜头:
创建项目
项目就随意创建一个 python 项目即可,然后新建一个 .py 文件
在第一行引入 画图工具库 :
import turtle
初始化
首先我们需要创建一个画布,以及设置背景图片和画笔速度等参数,定义一个函数,代码如下:
def init():
turtle.bgpic('B:/PyCharmProjects/netDemo/com/maxuhui/net/万圣节.png')
turtle.screensize(600, 800, bg='white')
turtle.speed(10)
turtle.hideturtle()
turtle.bgcolor('black')
turtle.bgpic('B:/PyCharmProjects/netDemo/com/maxuhui/net/万圣节.png')
注意缩进!注意缩进!注意缩进!
Python 中有严格的代码缩进,否则会报错!
南瓜头轮廓
首先先把轮廓给画出来,也就是一个大致的形状,同样封装到函数内,代码如下:
def outline():
turtle.color('#CF5E1A', '#CF5E1A')
turtle.penup()
turtle.goto(250, 30)
turtle.pendown()
turtle.seth(90)
turtle.begin_fill()
for j in range(25):
turtle.fd(j)
turtle.left(3.6)
for j in range(25, 0, -1):
turtle.fd(j)
turtle.left(3.6)
turtle.seth(-90)
turtle.circle(254, 180)
turtle.end_fill()
绘制南瓜枝
南瓜头顶部是有一个枝的,这里定义一个函数去画南瓜枝:
def tail():
turtle.penup()
turtle.goto(0, 180)
turtle.pendown()
turtle.color('#2E3C01')
turtle.seth(100)
turtle.pensize(25)
turtle.circle(60, 100)
眼睛
南瓜头眼睛绘制代码:
def eyes(args):
for items in args:
position, angle, direction = items
turtle.pensize(6)
turtle.penup()
turtle.goto(position, 0)
turtle.pendown()
turtle.color('#4C180D', '#4C180D')
turtle.begin_fill()
turtle.seth(angle)
for j in range(55):
turtle.fd(3)
if direction:
turtle.left(3) # 左转3度
else:
turtle.right(3) # 右转3度
turtle.goto(position, 0)
turtle.end_fill()
鼻子和嘴巴
def nose():
# 鼻子
turtle.penup()
turtle.goto(0, 0)
turtle.seth(180)
turtle.pendown()
turtle.begin_fill()
turtle.circle(50, steps=3)
turtle.end_fill()
def mouth():
# 嘴巴
turtle.color('#F9D503', '#F9D503')
turtle.pensize(6)
turtle.penup()
turtle.penup()
turtle.goto(-150, -100)
turtle.pendown()
turtle.begin_fill()
turtle.seth(-30)
turtle.fd(100)
turtle.left(90)
turtle.fd(30)
turtle.right(90)
turtle.fd(60)
turtle.left(60)
turtle.fd(60)
turtle.right(90)
turtle.fd(30)
turtle.left(90)
turtle.fd(100)
turtle.end_fill()
turtle.done()
运行
调用以上我们写的几个函数,然后运行:
if __name__ == '__main__':
init()
outline()
tail()
eyes_items = [(-60, 230, 0), (60, -50, 1)]
eyes(eyes_items)
nose()
mouth()
turtle.done()
最终效果
关注微信公众号"程序员小辉"