用Python画一副爱的画,让表白在二进制中闪烁!

目录

引言

一、turtle库函数基础命令介绍

1、设置窗口标题

2、设置画布大小

3、设置画笔属性

4、设置绘图命令

二、表白实战

1、爱心表白

2、爱之花舞

3、浪漫爱意

总结


引言

用代码编织爱意,变量是你,函数是我们。


一、turtle库函数基础命令介绍

turtle是python内置的图形化模块,可以用来绘制线条、圆、文本等。

1、设置窗口标题

窗口标题是程序运行后弹出窗口的名字,默认为Python Turtle Graphics

turtle.title("初见乍惊欢,久处亦怦然!")

2、设置画布大小

画布就是turtle用于绘图区域, 我们可以设置画布的大小为宽度900像素,高度500像素(输入宽和高为整数时, 表示像素;输入为小数时, 表示占据电脑屏幕的比例)

turtle.setup(900, 500)

3、设置画笔属性

画笔属性包括用于指定绘制的图形线条的宽度和颜色。我们可以设置画笔的宽度为2个像素和颜色为黑色(可以使用命名颜色或RGB值)

turtle.pensize(2)

turtle.color('black')

 各颜色与其英文对照表

 RGB与十六进制颜色对照表

4、设置绘图命令

抬起画笔函数,是指在移动时不绘制图形,提起笔,即鼠标移动不会在画布上留下痕迹,用于另起一个地方绘制

turtle.penup() 

位置函数,是指移动到指定的坐标 (x, y) 处(参数 x 是水平方向的像素坐标,y 是垂直方向的像素坐标),我们可以设置画笔移动到的位置在(0, 0)原点处

turtle.goto(0, 0)

放下画笔函数,是指在移动时绘制图形,放下笔,即鼠标移动会在画布上留下痕迹。 

turtle.pendown()

画笔方向函数,是用于控制鼠标的方向,参数是角度值(参数为0时,即设置画笔的朝向水平向右;参数为90时,即设置画笔的朝向垂直向上;参数为180时,即设置画笔的朝向水平向左

turtle.setheading(0)
turtle.setheading(90)
turtle.setheading(180)

移动画笔函数,用于让画笔沿着当前画笔方向/相反方向/顺时针/逆时针直线移动一定的像素长度(我们可以是设置画笔先向当前画笔方向直线移动300个像素长度,然后画笔向相反方向移动600个像素长度。在 turtle 绘图中,方向默认是向右的,也就是初始时画笔的朝向是水平向右的) 

turtle.fd(300)
turtle.bk(600)

绘制圆形函数(我们可以设置以goto函数移动的位置(0, 0)为圆心,绘制一个半径为60的圆,绘制的角度为360度,即绘制整个圆)

turtle.circle(60, 360)

画笔旋转移动函数(我们可以设置画笔顺时针移动120度后,再逆时针移动30度)

turtle.right(120)
turtle.left(30)

填充图形函数,是指利用turtle.begin_fill() 和turtle.end_fill() 两个函数将之间的区域填充上指定颜色(turtle.begin_fill() 准备开始填充图形,turtle.end_fill()填充完成)

turtle.begin_fill() 
turtle.end_fill()

绘制文字的函数(我们可以设置文字的字体,大小和格式)

turtle.write(text, font=('宋体', 12, 'normal'))

延迟函数(暂停程序执行1秒钟)

time.sleep(1)

速度函数(控制画笔绘制的速度,画笔绘制的速度范围[0,10]整数, 数字越大越快)

turtle.speed(1)

隐藏鼠标显示函数(作图时不会看到鼠标移动画图)

hideturtle()

 清除函数(清除turtle窗口,但是turtle的位置和状态不会改变)

turtle.clear()

二、表白实战

1、爱心表白

# 导入需要的模块,包括时间处理模块time和绘图模块turtle
import time
import turtle
from turtle import mainloop, hideturtle


# 定义清除画布的函数clear_all(),用于清除之前绘制的图形
def clear_all():
    turtle.penup()
    turtle.goto(0, 0)
    turtle.color('white')
    turtle.pensize(800)
    turtle.pendown()
    turtle.setheading(0)
    turtle.fd(300)
    turtle.bk(600)


# 定义重定位鼠标位置的函数go_to(x, y, state),通过传入坐标和状态来控制鼠标的位置和画笔状态
def go_to(x, y, state):
    # 如果state为真,则放下画笔(pendown()),使得鼠标在移动时绘制图形;
    # 如果state为假,则抬起画笔(penup()),使得鼠标在移动时不绘制图形,只是移动而不留下痕迹
    turtle.pendown() if state else turtle.penup()
    turtle.goto(x, y)


# 定义绘制心形的函数draw_heart(size),通过一系列turtle命令实现绘制
def draw_heart(size):
    # 设置画笔颜色和填充颜色。它接受两个参数,第一个参数是画笔颜色,第二个参数是填充颜色
    turtle.color('red', 'pink')
    turtle.pensize(2)
    turtle.pendown()
    turtle.setheading(150)

    # 调用 begin_fill() 和 end_fill() 之间的区域将被填充上指定颜色
    turtle.begin_fill()  # 用于开始记录心形的轮廓
    turtle.fd(size)
    # 用于绘制一个size*-3.745控制圆弧为半径,45角度为圆弧
    # 负号 -3.745 使得圆弧呈现出向内凹的形状,从而形成心形的一部分
    turtle.circle(size * -3.745, 45)
    turtle.circle(size * -1.431, 165)
    turtle.left(120)
    turtle.circle(size * -1.431, 165)
    turtle.circle(size * -3.745, 45)
    turtle.fd(size)
    turtle.end_fill()  # 用于填充整个心形的区域


# 定义绘制发射爱心的小人的函数draw_people(x, y)
def draw_people(x, y):
    turtle.penup()  # 抬起画笔,避免绘制图形
    turtle.goto(x, y)  # 移动到指定的坐标 (x, y) 处
    turtle.pendown()  # 放下画笔,准备开始绘制
    turtle.pensize(2)  # 设置画笔的宽度为2个像素
    turtle.color('black')  # 设置画笔颜色为黑色
    turtle.setheading(0)  # 设置鼠标的朝向水平向右

    # 绘制头部
    turtle.circle(60, 360)  # 画一个半径为60的圆,即头部

    # 绘制两只眼睛
    turtle.penup()
    turtle.setheading(90)  # 设置鼠标的朝向垂直向上
    turtle.fd(75)  # 向上移动75个单位长度
    turtle.setheading(180)  # 设置鼠标的朝向水平向左
    turtle.fd(20)  # 向左移动20个单位长度
    turtle.pensize(4)  # 设置画笔的宽度为4个像素
    turtle.pendown()  # 放下画笔,准备开始绘制
    turtle.circle(2, 360)  # 画一个半径为2的圆,即左眼
    turtle.setheading(0)  # 设置鼠标的朝向水平向右
    turtle.penup()
    turtle.fd(40)  # 向右移动40个单位长度
    turtle.pensize(4)  # 设置画笔的宽度为4个像素
    turtle.pendown()  # 放下画笔,准备开始绘制
    turtle.circle(-2, 360)  # 画一个半径为2的圆,即右眼

    # 绘制嘴巴
    turtle.penup()
    turtle.goto(x + 20, y + 20)  # 调整嘴巴位置
    turtle.setheading(90)  # 设置鼠标的朝向垂直向上
    turtle.fd(20)  # 向上移动20个单位长度
    turtle.pensize(4)  # 设置画笔的宽度为4个像素
    turtle.pendown()
    turtle.circle(20, -180)  # 画一个半径为2的圆,即左眼

    # 绘制身体
    turtle.penup()
    turtle.goto(x, y)  # 返回起始位置
    turtle.setheading(-90)  # 设置鼠标的朝向垂直向下
    turtle.pendown()  # 放下画笔,准备开始绘制
    turtle.fd(20)  # 向下移动20个单位长度
    turtle.setheading(0)  # 设置鼠标的朝向水平向右
    turtle.fd(35)  # 向右移动35个单位长度
    turtle.setheading(60)  # 设置鼠标的朝向逆时针旋转60度
    turtle.fd(10)  # 沿着当前方向前进10个单位长度
    turtle.penup()
    turtle.goto(x, y)  # 返回起始位置
    turtle.setheading(-90)  # 设置鼠标的朝向垂直向下
    turtle.pendown()  # 放下画笔,准备开始绘制
    turtle.fd(40)  # 向下移动40个单位长度
    turtle.setheading(0)  # 设置鼠标的朝向水平向右
    turtle.fd(35)  # 向右移动35个单位长度
    turtle.setheading(-60)  # 设置鼠标的朝向逆时针旋转60度
    turtle.fd(10)  # 沿着当前方向前进10个单位长度
    turtle.penup()
    turtle.goto(x, y)  # 返回起始位置
    turtle.setheading(-90)  # 设置鼠标的朝向垂直向下
    turtle.pendown()  # 放下画笔,准备开始绘制
    turtle.fd(60)  # 向下移动60个单位长度
    turtle.setheading(-135)  # 设置鼠标的朝向逆时针旋转135度
    turtle.fd(60)  # 沿着当前方向前进60个单位长度
    turtle.bk(60)  # 沿着当前方向后退60个单位长度
    turtle.setheading(-45)  # 设置鼠标的朝向逆时针旋转45度
    turtle.fd(30)  # 沿着当前方向前进30个单位长度
    turtle.setheading(-135)  # 设置鼠标的朝向逆时针旋转135度
    turtle.fd(35)  # 沿着当前方向前进35个单位长度
    turtle.penup()  # 抬起画笔,绘制完成


# 定义绘制文字的函数draw_text(text, t_color, font_size, show_time),通过turtle库绘制指定颜色、字体大小的文字,并在指定时间后清除
def draw_text(text, t_color, font_size, show_time):
    turtle.penup()  # 抬起画笔,准备移动而不绘制
    turtle.goto(-350, 0)  # 将画笔移动到指定位置
    turtle.color(t_color)  # 设置画笔颜色
    turtle.write(text, font=('宋体', font_size, 'normal'))
    time.sleep(show_time)  # 暂停程序执行show_time秒钟
    clear_all()  # 清除画布


# 定义绘制爱心发射场景的函数draw_(),通过一系列turtle命令实现
def draw_process():
    # turtle.speed(10), 其中0表示“最快”,1表示“慢速”,10表示“最慢”
    turtle.speed(10)  # 设置画笔速度为最快
    draw_people(-250, 20)  # 绘制小人形状
    turtle.penup()  # 抬起画笔,准备移动而不绘制
    turtle.goto(-150, -30)  # 将画笔移动到指定位置
    draw_heart(14)  # 绘制大小为14的心形
    turtle.penup()  # 抬起画笔,准备移动而不绘制
    turtle.goto(-200, -200)  # 将画笔移动到指定位置
    turtle.color('pink')  # 设置画笔颜色为粉红色
    turtle.write('Biu~', font=('宋体', 60, 'normal'))  # 在当前位置写入文本 'Biu~'
    turtle.penup()  # 抬起画笔,准备移动而不绘制
    turtle.goto(-20, -60)  # 将画笔移动到指定位置
    draw_heart(25)  # 绘制大小为25的心形
    turtle.penup()  # 抬起画笔,准备移动而不绘制
    turtle.goto(-25, -200)  # 将画笔移动到指定位置
    turtle.color('pink')  # 设置画笔颜色为粉红色
    turtle.write('Biu~', font=('宋体', 60, 'normal'))  # 在当前位置写入文本 'Biu~'
    turtle.penup()  # 抬起画笔,准备移动而不绘制
    turtle.goto(200, -100)  # 将画笔移动到指定位置
    draw_heart(45)  # 绘制大小为45的心形
    turtle.penup()  # 抬起画笔,准备移动而不绘制
    turtle.goto(150, -200)  # 将画笔移动到指定位置
    turtle.color('pink')  # 设置画笔颜色为粉红色
    turtle.write('Biu~', font=('宋体', 60, 'normal'))  # 在当前位置写入文本 'Biu~'
    turtle.hideturtle()  # 隐藏画笔图形
    time.sleep(3)  # 暂停程序执行3秒钟


# 定义主函数main(),设置窗口标题、大小,依次调用draw_text()draw_process()函数绘制文字和场景
def main():
    # 隐藏鼠标
    hideturtle()
    # 设置窗口的标题
    turtle.title("初见乍惊欢,久处亦怦然!")

    # 设置了画布的大小为宽度900像素,高度500像素
    turtle.setup(900, 500)

    draw_text("Are You Ready?", "black", 60, 1)
    draw_text("接下来,我想对你说:", "deepskyblue", 45, 2)
    draw_text("感谢你的出现,让我的日子这么甜!", "hotpink", 35, 3)

    draw_process()
    # 调用mainloop()以防止窗口卡死
    mainloop()


# 在模块被直接运行时,调用主函数
if __name__ == '__main__':
    main()

展示如下:

2、爱之花舞

import turtle


def red_heart(x, y, liftx):
    turtle.pensize(3)  # 设置画笔宽度为3个像素
    turtle.speed(10)  # 设置画笔移动速度为10
    turtle.color("red", "red")  # 设置画笔颜色为红色,填充颜色也为红色
    turtle.up()  # 抬起画笔,不绘制图形
    turtle.goto(x, y)  # 将画笔移动到指定坐标 (x, y)
    turtle.down()  # 放下画笔,准备开始绘制
    turtle.begin_fill()  # 开始填充形状
    turtle.left(liftx)  # 逆时针旋转画笔一定角度
    turtle.fd(80)  # 向当前方向前进80个单位长度
    turtle.circle(-40, 180)  # 以当前位置为圆心画指定半径和角度的弧
    turtle.left(90)  # 逆时针旋转画笔90度
    turtle.circle(-40, 180)  # 以当前位置为圆心画指定半径和角度的弧
    turtle.left(0)  # 逆时针旋转画笔0度
    turtle.fd(80)  # 向当前方向前进80个单位长度
    turtle.end_fill()  # 结束填充形状


def rose():
    turtle.speed(10)  # 设置画笔移动速度为10
    turtle.penup()  # 抬起画笔,不绘制图形
    turtle.left(90)  # 逆时针旋转画笔90度
    turtle.fd(200)  # 向当前方向前进200个单位长度
    turtle.pendown()  # 放下画笔,准备开始绘制
    turtle.right(90)  # 顺时针旋转画笔90度
    turtle.pensize(2)  # 设置画笔宽度为2个像素

    # 以下为绘制花朵的具体步骤,包括花蕊、花瓣、叶子等

    turtle.fillcolor("red")  # 设置填充颜色为红色
    turtle.begin_fill()  # 开始填充
    turtle.circle(10, 180)  # 画一个半径为10的半圆
    turtle.circle(25, 110)  # 画一个半径为25的半圆
    turtle.left(50)  # 左转50度
    turtle.circle(60, 45)  # 画一个半径为60的45度圆弧
    turtle.circle(20, 170)  # 画一个半径为20的170度圆弧
    turtle.right(24)  # 右转24度
    turtle.fd(30)  # 向前移动30个单位长度
    turtle.left(10)  # 左转10度
    turtle.circle(30, 110)  # 画一个半径为30的110度圆弧
    turtle.fd(20)  # 向前移动20个单位长度
    turtle.left(40)  # 左转40度
    turtle.circle(90, 70)  # 画一个半径为90的70度圆弧
    turtle.circle(30, 150)  # 画一个半径为30的150度圆弧
    turtle.right(30)  # 右转30度
    turtle.fd(15)  # 向前移动15个单位长度
    turtle.circle(80, 90)  # 画一个半径为80的90度圆弧
    turtle.left(15)  # 左转15度
    turtle.fd(45)  # 向前移动45个单位长度
    turtle.right(165)  # 右转165度
    turtle.fd(20)  # 向前移动20个单位长度
    turtle.left(155)  # 左转155度
    turtle.circle(150, 80)  # 画一个半径为150的80度圆弧
    turtle.left(50)  # 左转50度
    turtle.circle(150, 90)  # 画一个半径为150的90度圆弧
    turtle.end_fill()  # 结束填充

    # 右侧花瓣
    turtle.left(150)  # 左转150度
    turtle.circle(-90, 70)  # 画一个半径为-90的70度圆弧(实际为反向弧)
    turtle.left(20)  # 左转20度
    turtle.circle(75, 105)  # 画一个半径为75的105度圆弧
    turtle.setheading(60)  # 设置朝向为60度
    turtle.circle(80, 98)  # 画一个半径为80的98度圆弧
    turtle.circle(-90, 40)  # 画一个半径为-90的40度圆弧(实际为反向弧)

    # 左侧花瓣
    turtle.left(180)  # 左转180度
    turtle.circle(90, 40)  # 画一个半径为90的40度圆弧
    turtle.circle(-80, 98)  # 画一个半径为-80的98度圆弧(实际为反向弧)
    turtle.setheading(-83)  # 设置朝向为-83度

    # 左侧叶子
    turtle.fd(30)  # 向前移动30个单位长度
    turtle.left(90)  # 左转90度
    turtle.fd(25)  # 向前移动25个单位长度
    turtle.left(45)  # 左转45度
    turtle.fillcolor("green")  # 设置填充颜色为绿色
    turtle.begin_fill()  # 开始填充
    turtle.circle(-80, 90)  # 画一个半径为-80的90度圆弧
    turtle.right(90)  # 右转90度
    turtle.circle(-80, 90)  # 画一个半径为-80的90度圆弧
    turtle.end_fill()  # 结束填充

    turtle.right(135)  # 右转135度
    turtle.fd(60)  # 向前移动60个单位长度
    turtle.left(180)  # 左转180度
    turtle.fd(85)  # 向前移动85个单位长度
    turtle.left(90)  # 左转90度
    turtle.fd(80)  # 向前移动80个单位长度

    # 右侧叶子
    turtle.right(90)  # 右转90度
    turtle.right(45)  # 右转45度
    turtle.fillcolor("green")  # 设置填充颜色为绿色
    turtle.begin_fill()  # 开始填充
    turtle.circle(80, 90)  # 画一个半径为80的90度圆弧
    turtle.left(90)  # 左转90度
    turtle.circle(80, 90)  # 画一个半径为80的90度圆弧
    turtle.end_fill()  # 结束填充

    turtle.left(135)  # 左转135度
    turtle.fd(60)  # 向前移动60个单位长度
    turtle.left(180)  # 左转180度
    turtle.fd(60)  # 向前移动60个单位长度
    turtle.right(90)  # 右转90度
    turtle.circle(200, 50)  # 画一个圆 200 是半径,50 是弧度

    red_heart(-230, 80, 180)  # 调用 red_heart 函数,传递参数 x=-230, y=80, angle=180,绘制一个红色的心形图案
    red_heart(-230, -80, -30)  # 调用 red_heart 函数,传递参数 x=-230, y=-80, angle=-30,绘制一个红色的心形图案
    red_heart(-130, -180, -30)  # 调用 red_heart 函数,传递参数 x=-130, y=-180, angle=-30,绘制一个红色的心形图案
    red_heart(210, 80, 120)  # 调用 red_heart 函数,传递参数 x=210, y=80, angle=120,绘制一个红色的心形图案
    red_heart(170, -110, 180)  # 调用 red_heart 函数,传递参数 x=170, y=-110, angle=180,绘制一个红色的心形图案

    # 绘制玫瑰花并添加文字
    printer = turtle.Turtle()  # 创建一个新的画笔对象
    printer.hideturtle()  # 隐藏画笔图标
    printer.penup()  # 抬起画笔,不绘制图形
    printer.back(200)  # 向后移动200个单位长度
    printer.write("赠给亲爱的 女士\n\n", align="right", font=("楷体", 16, "bold"))
    printer.write("from 先生", align="center", font=("楷体", 12, "normal"))

    turtle.done()  # 完成绘制


if __name__ == "__main__":
    turtle.title("是微风,是晚霞,是心跳,是无可替代")  # 设置窗口标题
    rose()  # 调用rose函数进行绘制

展示如下:

3、浪漫爱意

import time  # 导入时间模块
import turtle  # 导入 turtle 模块

def go_to(x, y):
    turtle.up()  # 抬起画笔,不绘制图形
    turtle.goto(x, y)  # 将画笔移动到指定坐标 (x, y)
    turtle.down()  # 放下画笔,准备绘制图形

def small_Circle(size):  # 函数用于绘制心的小圆
    turtle.speed(10)  # 设置绘制速度为10,控制海龟绘图速度
    for i in range(210):
        turtle.forward(size)  # 向当前方向前进指定长度
        turtle.right(0.786)  # 向右旋转指定角度

def big_Circle(size):  # 函数用于绘制心的大圆
    turtle.speed(10)  # 设置绘制速度为10
    for i in range(150):
        turtle.forward(size)  # 向当前方向前进指定长度
        turtle.right(0.3)  # 向右旋转指定角度

def line(size):
    turtle.speed(10)  # 设置绘制速度为10
    turtle.forward(51 * size)  # 向当前方向前进指定长度

def heart(x, y, size):
    go_to(x, y)  # 调用 go_to 函数将画笔移动到指定坐标
    turtle.left(150)  # 将海龟左转150度
    turtle.begin_fill()  # 开始填充图形
    line(size)  # 调用 line 函数绘制线段
    big_Circle(size)  # 调用 big_Circle 函数绘制大圆
    small_Circle(size)  # 调用 small_Circle 函数绘制小圆
    turtle.left(120)  # 将海龟左转120度
    small_Circle(size)  # 再次调用 small_Circle 函数绘制小圆
    big_Circle(size)  # 再次调用 big_Circle 函数绘制大圆
    line(size)  # 再次调用 line 函数绘制线段
    turtle.end_fill()  # 结束填充图形

def main():
    turtle.pensize(2)  # 设置画笔的宽度为2个像素
    turtle.color('red', 'pink')  # 设置画笔颜色和填充颜色
    turtle.getscreen().tracer(1, 0)  # 设置 turtle 模块的追踪速度,用于控制绘图显示的速度
    heart(100, 0, 0.7)  # 调用 heart 函数绘制心形图案
    time.sleep(0.3)  # 暂停程序执行0.3秒
    go_to(80, 70)  # 调用 go_to 函数将画笔移动到指定坐标
    turtle.write("官人", font=("楷体", 18, "normal"))  # 在画布上写文字
    turtle.setheading(0)  # 设置海龟的朝向为水平向右
    heart(-80, -100, 1)  # 再次调用 heart 函数绘制心形图案
    time.sleep(0.3)  # 暂停程序执行0.3秒
    go_to(-110, 15)  # 调用 go_to 函数将画笔移动到指定坐标
    turtle.write("娘子", font=("宋体", 20, "normal"))  # 在画布上写文字
    time.sleep(0.7)  # 暂停程序执行0.7秒
    go_to(40, -80)  # 调用 go_to 函数将画笔移动到指定坐标
    turtle.write("春风十里,不如你,三生三世皆是你!", move=True, align="left", font=("arial", 12, "italic"))  # 在画布上写文字
    turtle.done()  # 结束 turtle 图形界面

if __name__ == "__main__":
    turtle.title("那就在一起,晨昏与四季")  # 设置窗口标题
    main()  # 调用 main 函数进行绘制

展示如下: 


总结

用代码创造甜蜜瞬间,变量中藏着我对你的表白!

  • 32
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瑞雪兆我心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值