【中秋赏月】PythonTurtle画圆月星空图

在正文的第一句加入“我正在参加中秋创意投稿大赛,详情请看:中秋创意投稿大赛

前言

从古至今农历八月十五前后都是一年一度赏月最佳时节,我们在上学的时候就通过诗人们的诗句中,对月的美略窥一二:

  • “明月出天山,苍茫云海间”,李白为我们描绘出月亮刚出来的壮丽场景🌒
  • “可怜九月初三夜,露似珍珠月似弓”,白居易为我们描述了如弓形的月亮🌛
  • “露从今夜白,月是故乡明”,王维吐露出了独在异乡游子们把家乡的思念寄托在月亮上🌔

不仅诗句对月亮寄托了各种情感,耳熟能详流传民间的传说如嫦娥奔月、玉兔捣药、貂蝉拜月等,到现代科技上对月亮的探索从未停下脚步🚀

如今,又到了中秋佳节了。在开心过节之前,我们本期用Python Turtle来画一幅星空月圆图吧~

1. Turtle 概述

Turtle 中文名叫“海龟”,是Python用于引导初学者进行编程学习的一个绘制图像库。

Python 形象地使用小海龟在横轴为x、纵轴为y的坐标原点(0,0)位置开始,在平面系统上中进行移动,它爬行的路径就是我们绘制的图形。

Turtle 语法格式:

# 导入turtle库
from turtle import *
# 创建Turtle对象
t = Turtle()
复制代码

2. Turtle 组成部分

  • 画布📃:画布就是turtle提供绘制的的区域

    1. 使用turtle.setup()

      screen = Screen()
      screen.setup(800,800)
      复制代码
    2. 使用turtle.screensize(width,height,bg)

      screen = Screen()
      screen.screensize(800,800,bg="black")
      复制代码
  • 画笔🖌️:默认从原点(0,0)出发爬行的小乌龟

    1. 画笔动作

      方法 作用
      turtle.pendown() 画笔落下
      turtle.penup() 画笔拾起
    2. 画笔属性

      方法 作用
      turtle.pensize() 设置画笔的宽度
      turtle.pencolor() 没有参数传入,返回当前画笔颜色
      turtle.speed(speed) 设置画笔移动速度,画笔绘制的速度范围[0,10]
  • 绘图📊:

    1. 画笔运动
    2. 画笔控制
    3. 全局控制

2. Turtle 基本方法

👉 画笔运动方法

方法 说明
turtle.forward(distance) 向当前画笔方向移动distance像素长度
turtle.backward(distance) 向当前画笔相反方向移动distance像素长度
turtle.right(degree) 顺时针移动degree°
turtle.left(degree) 逆时针移动degree°
turtle.goto(x,y) 将画笔移动到坐标为x,y的位置
turtle.circle() 画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆
setx( ) 将当前x轴移动到指定位置
sety( ) 将当前y轴移动到指定位置
setheading(angle) 设置当前朝向为angle角度
home() 设置当前画笔位置为原点,朝向东。
dot(r) 绘制一个指定直径和颜色的圆点

👉 画笔控制方法

方法 说明
turtle.fillcolor(colorstring) 绘制图形的填充颜色
turtle.color(color1, color2) 同时设置pencolor=color1, fillcolor=color2
turtle.filling() 返回当前是否在填充状态
turtle.begin_fill() 准备开始填充图形
turtle.end_fill() 填充完成填充完成
turtle.hideturtle() 隐藏画笔的turtle形状
turtle.showturtle() 显示画笔的turtle形状

👉 全局控制命令

方法 说明
turtle.clear() 清空turtle窗口,但是turtle的位置和状态不会改变
turtle.reset() 清空窗口,重置turtle状态为起始状态
turtle.undo() 撤销上一个turtle动作
turtle.isvisible() 返回当前turtle是否可见
stamp() 复制当前图形
turtle.write(s [,font=("font-name",font_size,"font_type")]) 写文本,s为文本内容,font是字体的参数,分别为字体名称

1. 圆月星空图

使用Turtle画简易版的圆月星空图如下:

📣 重要说明:

  1. 首先创建一个画布

    • 画布的长宽分别为1200*900

    • 画布背景色为黑色

    • 画布的颜色模式切换成RGB格式

    screen = Screen()
    width,height = 1200,900
    screen.setup(width,height)
    screen.bgcolor("black")
    screen.delay()
    screen.colormode(255)
    复制代码
  2. 画一轮明月

    • 首先定义一个Turtle对象
    • 画笔的颜色和填充颜色都是白色
    • 最后使用turtle.circle(120)画一个大小为120的圆
    def moon():
    
    m = Turtle(visible=False, shape="circle")
    m.pensize(10)
    m.pencolor("white")
    m.penup()
    m.fillcolor("white")
    m.goto(width/3,120)
    m.pendown()
    m.begin_fill()
    m.circle(120)
    m.end_fill()
    
    复制代码
  3. 画小小星

    • 创建Turtle对象
    • 定义画笔和填充颜色为随机色
    • 最后使用绘画步骤:penup、pendown、goto
    def stars(x,y,left,edge):
    
    t = Turtle(visible=False, shape="turtle")
    t.pensize(2)
    t.pencolor(randomcolor())
    t.fillcolor(randomcolor())
    t.speed(0)
    t.penup()
    t.goto(x,y)
    t.pendown()
    t.left(left)
    for _ in range(5):
        t.forward(edge)
        t.right(144)
    t.end_fill()
    t.left(-left)
    复制代码
  4. 我们使用for 循环创建位置随机的小小星

    for _ in range(100):
    x = random.randint(-450,450)
    y = random.randint(0,400)
    edge = random.randint(3,8)
    left = random.randint(0,180)
    stars(x,y,left,edge)
    复制代码
  5. 最后完整的代码如下:

from turtle import *
import random

screen = Screen()
width,height = 1200,900
screen.setup(width,height)
screen.bgcolor("black")
screen.delay()
screen.colormode(255)

def stars(x,y,left,edge):

    t = Turtle(visible=False, shape="turtle")
    t.pensize(2)
    t.pencolor(randomcolor())
    t.fillcolor(randomcolor())
    t.speed(0)
    t.penup()
    t.goto(x,y)
    t.pendown()
    t.left(left)
    for _ in range(5):
        t.forward(edge)
        t.right(144)
    t.end_fill()
    t.left(-left)

def moon():

    m = Turtle(visible=False, shape="circle")
    m.pensize(10)
    m.pencolor("white")
    m.penup()
    m.fillcolor("white")
    m.goto(width/3,120)
    m.pendown()
    m.begin_fill()
    m.circle(120)
    m.end_fill()

def randomcolor():

    R = random.randint(0, 255)
    G = random.randint(0, 255)
    B = random.randint(0, 255)

moon()
for _ in range(100):
    x = random.randint(-450,450)
    y = random.randint(0,400)
    edge = random.randint(3,8)
    left = random.randint(0,180)
    stars(x,y,left,edge)
复制代码

总结

本期,我们学习使用turtle 海龟图像库组成部分和相关的方法使用,并上手实操画出简版的圆月星空图,来迎接中秋佳节的到来~

以上是本期内容,欢迎大佬们点赞评论指正,下次见~ღ( ´・ᴗ・` )比心🌹🌹🌹