文章目录
- 环境准备
- turtle 库
- 源代码
- 封装一个自己的函数
- 月饼主体
- 写一段文字
- 最终效果
2022.9.10 既是中秋节又是教师节,Jia ming 在这里祝大家阖家团圆,中秋快乐,也祝天下的老师桃李满园,教师节快乐!这里为大家呈现上一个 Python 小项目 —— 使用 turtle 绘制月饼。
月。光辉,皎洁。耀乾坤,静空阔。圆满中秋,玩争诗哲。玉兔镝难穿,桂枝人共折。万象照乃无私,琼台岂遮君谒。抱琴对弹别鹤声,不得知音声不切。——【唐】李绅《赋月》
环境准备
macbook 运行环境准备
mac 默认 Python 版本为 3.8.x,在运行 turtle 时,会出现黑屏闪烁的情况。为了正常运行 turtle,我们需要安装更新的 Python 版本,这里以 Python 3.10.6-macos 11.pkg(提取码: yimf)为例。
安装过程很简单,双击安装包
一直点击继续即可。
然后设置 python 和 pip 两个命令指向 python3.10.6 和 pip3.10,这样做的目的就是改变系统上主要使用的 Python 的版本,这样在命令行中输入 Python 就会显示如下内容:
在命令行中查看已经安装的 Pyhton 包:
那么,到底是怎么实现的呢?在家目录下(比如:/Users/zhangjiaming),创建两个文件(touch .zshrc、touch bash_profile),内容如下:
turtle 库
turtle 官网:https://pythonturtle.org
PythonTurtle致力于提供学习(或教授)Python编程语言软件开发的最低门槛方法。学生使用交互式Python shell(类似于空闲开发环境)并使用Python函数移动屏幕上显示的海龟。一个带插图的帮助屏幕向学生介绍Python编程的基础知识,同时演示如何移动海龟。
turtle 是一个十分方便的 Python 绘图库,只需要使用简单的过程方法,就可以绘制出许多有趣的图形。
turtle 模拟了用笔绘图的过程:
- 落笔 —— turtle.pendown()
- 起笔 —— turtle.penup()
- 画直线 —— turtle.forward(xxx)
- 笔的尺寸 —— turtle.pensize(xxx)
- 向左转多少度 —— turtle.left(xxx)
- …
让可爱的海龟动起来!Turtle库做出的简单动画,使Python无所不能 里面详细说了坐标系的问题。
源代码
封装一个自己的函数
就像是画画的时候一样,总有一个起笔——移动——落笔的过程,我们使用下面的函数来实现这三个步骤,否则,画笔会显示出画笔移动的轨迹。
def goto(x, y):turtle.penup()
turtle.goto(x, y)
turtle.pendown()
月饼主体
我们的月饼分为以下几个部分:
# 最外侧花边
turtle.pensize(20)
goto(0, 0)
turtle.color("#83572F")
for _ in range(30):
turtle.left(12)
turtle.begin_fill()
turtle.forward(200)
turtle.circle(25, 180)
turtle.goto(0, 0)
turtle.left(180)
turtle.end_fill()
# 内侧花边
goto(0, 0)
turtle.color("#E1A43B")
for _ in range(30):
turtle.left(12)
turtle.begin_fill()
turtle.forward(180)
turtle.circle(25, 180)
turtle.goto(0, 0)
turtle.left(180)
turtle.end_fill()
# 圆形
goto(0, -180)
turtle.color("#F2C54D")
turtle.begin_fill()
turtle.circle(180)
turtle.end_fill()
# 矩形
x = 125
y = 2*x
turtle.pensize(15)
turtle.color("#C97E2E")
goto(-x, x)
turtle.pensize(10)
turtle.forward(y)
goto(-x, x-y)
turtle.forward(y)
goto(-x, x)
turtle.right(90)
turtle.forward(y)
goto(x, x)
turtle.forward(y)
# 中心花瓣
goto(0, 0)
turtle.pensize(10)
turtle.color("#36210E")
for _ in range(30):
turtle.left(12)
# turtle.begin_fill()
turtle.forward(100)
turtle.circle(25)
turtle.goto(0, 0)
写一段文字
turtle 实现了绘制文字的函数,我们可以直接调用以实现文字效果。
def wirte():goto(200, -270) # 从哪里开始写
turtle.color("black") # 画笔颜色
turtle.write("祝:\n\n各位中秋节快乐,\n吉祥如意!\n\n Jia ming", font=("Time",20,"bold")) # 书写内容、文字样式
完整代码:
import turtledef goto(x, y):
turtle.penup()
turtle.goto(x, y)
turtle.pendown()
def draw():
turtle.pensize(20)
goto(0, 0)
turtle.color("#83572F")
for _ in range(30):
turtle.left(12)
turtle.begin_fill()
turtle.forward(200)
turtle.circle(25, 180)
turtle.goto(0, 0)
turtle.left(180)
turtle.end_fill()
goto(0, 0)
turtle.color("#E1A43B")
for _ in range(30):
turtle.left(12)
turtle.begin_fill()
turtle.forward(180)
turtle.circle(25, 180)
turtle.goto(0, 0)
turtle.left(180)
turtle.end_fill()
goto(0, -180)
turtle.color("#F2C54D")
turtle.begin_fill()
turtle.circle(180)
turtle.end_fill()
x = 125
y = 2*x
turtle.pensize(15)
turtle.color("#C97E2E")
goto(-x, x)
turtle.pensize(10)
turtle.forward(y)
goto(-x, x-y)
turtle.forward(y)
goto(-x, x)
turtle.right(90)
turtle.forward(y)
goto(x, x)
turtle.forward(y)
goto(0, 0)
turtle.pensize(10)
turtle.color("#36210E")
for _ in range(30):
turtle.left(12)
# turtle.begin_fill()
turtle.forward(100)
turtle.circle(25)
turtle.goto(0, 0)
# turtle.left(180)
# turtle.end_fill()
def wirte():
goto(200, -270)
turtle.color("black")
turtle.write("祝:\n\n各位中秋节快乐,\n吉祥如意!\n\n Jia ming", font=("Time",20,"bold"))
if __name__ == '__main__':
turtle.speed(9000)
turtle.hideturtle() # 隐藏笔头
draw()
wirte()
turtle.done()
最终效果
turtle 绘制月饼