文章目录
2022.9.10 既是中秋节又是教师节,在这里祝大家阖家团圆,中秋快乐,也祝天下的老师桃李满园,教师节快乐!这里为大家呈现上一个 Python 小项目 —— 使用 turtle 绘制月饼。
月。光辉,皎洁。耀乾坤,静空阔。圆满中秋,玩争诗哲。玉兔镝难穿,桂枝人共折。万象照乃无私,琼台岂遮君谒。抱琴对弹别鹤声,不得知音声不切。——【唐】李绅《赋月》
环境准备
macbook 运行环境准备
mac 默认 Python 版本为 3.8.x,在运行 turtle 时,会出现黑屏闪烁的情况。为了正常运行 turtle,我们需要安装更新的 Python 版本。
安装过程很简单,双击安装包
一直点击继续即可。
然后设置 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)
封装一个自己的函数
就像是画画的时候一样,总有一个起笔——移动——落笔的过程,我们使用下面的函数来实现这三个步骤,否则,画笔会显示出画笔移动的轨迹。
def 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 实现了绘制文字的函数,我们可以直接调用以实现文字效果。
def wirte(): goto(200, -270) # 从哪里开始写 turtle.color("black") # 画笔颜色 turtle.write("祝:\n\n各位中秋节快乐,\n吉祥如意!\n\n , font=("Time",20,"bold")) # 书写内容、文字样式
完整代码:
import turtle def 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()
最终效果
点击下方名片获取哦~备注“月饼”