巧用AI工具,为大家送去中秋节祝福

一、前言

Python中包含多种画图模块,包括matplotlib、pygame、Pillow(PIL)、pyplot、PycAIro、Pyglet等。matplotlib 是最为著名和功能强大的数据可视化库,它不仅能够创建静态、交互式和动态的图表,而且支持多种图形界面工具包,如Tkinter、wxPython等,广泛应用于科学计算领域。那么对于广泛使用的turtle小海龟模块大家是否熟悉呢?本文就带大家介绍一下turtle的用法。Python中包含多种画图模块,包括matplotlib、pygame、Pillow(PIL)、pyplot、PycAIro、Pyglet等。matplotlib 是最为著名和功能强大的数据可视化库,它不仅能够创建静态、交互式和动态的图表,而且支持多种图形界面工具包,如Tkinter、wxPython等,广泛应用于科学计算领域。那么对于广泛使用的turtle小海龟模块大家是否熟悉呢?本文就带大家介绍一下turtle的用法。

二、turtle库概述

1.turtle库概述

在1966年,Seymour Papert和Wally Feurzig发明了一种专门给儿童学习编程的语言——LOGO语言,它的特色就是通过编程指挥一个小海龟(turtle)在屏幕上绘图海龟绘图(Turtle Graphics)后来被移植到各种高级语言中,Python内置了turtle,基本上100%复制了原始的Turtle Graphics的所有功能。

2.turtle库功能

是python的标准库之一;属于入门级的图形绘制函数库turtle库提供了一个绘图的海龟机器人,海龟在窗体正中心,在画布上游走,走过的轨迹形成了绘制的图形海龟由程序控制,可以使用Python代码控制海龟机器人的移动和动作,可以自由改变颜色、方向宽度等从而实现绘制图形的功能。

turtle库基本操作

1.turtle使用

 1引入库

 使用前需先引入库,可以使用 from turtle import * 或者 import turtle。前者使用方法不需要加 turtle,后者需要加turtle。     

(2)创建图形窗口

Turtle是一个图形库,这意味着我们需要创建一个单独的窗口(屏幕)来执行每个绘图命令。我们可以通过为它初始化一个变量来创建这个屏幕。变量可以用来存储程序中使用的信息。在为变量赋值时初始化变量。不同于常量,变量可以在程序执行期间多次更改。

(3)变量初始化

s = turtle.getscreen()

初始化变量t。其中Turtle()turtle库所封装的一个类,提供了许多有用的接口,这里我们对其进行实例化。

t = turtle.Turtle()

现在我们已经具备了一块屏幕和一只海龟画笔。想象一下,屏幕好比是一块画布,而海龟就是一支笔,我们可以让海龟在屏幕上移动。

(4)方向移动操作

海龟笔可以朝四个方向移动,对应的编程指令对应如下:

指令              编程                 等价缩写

-------------------------------------------

前进(Forward)  —— t.right(dist)    —— t.rt(dist)

后退(Backward) —— t.forward(dist)  —— t.fd(dist)

向左(Left)     —— t.left(dist)     —— t.lt(dist)

向右(Right)    —— t.backward(dist) —— t.bk(dist)

2.简单图形绘制

t.fd(100)

t.rt(90)

t.fd(100)

t.rt(90)

t.fd(100)

t.rt(90)

t.fd(100)

(1)改变线条及颜色填充

当我们第一次打开一个新屏幕时,海龟开始是一个黑色的图形,并用黑色墨水绘制。为此,我们可以做两件事情:

  1. 改变海龟的颜色:将改变填充的颜色
  2. 改变钢笔的颜色:将改变轮廓或墨水的颜色。

可以选择这两种。在改变颜色之前,增大海龟的大小,以帮助您更清楚地看到颜色差异。输入以下代码

t.shapesize(3,3,3)

现在,要改变海龟(或填充)的颜色,只需调用fillcolor

t.begin_fill()

t.fd(100)

t.lt(120)

t.fd(100)

t.lt(120)

t.fd(100)

t.end_fill()

(2)设置绘图速度

海龟通常以常规的速度移动。当我们想减少或增加速度以使海龟移动得更慢或更快,那么便可以通过输入以下命令来实现:

t.speed(1)

t.forward(100)

t.speed(10)

t.forward(100)

2.turtle主要指令介绍

主要画笔控制指令如下:

四、turtle库应用实例

利用turtle库的一些 画笔运动命令、控制命令绘制简单的图形,放上字符串就可以实现图文并茂的效果,还可以搭配一些背景音乐,主函数代码如下:

import turtle
import time
import random  # 导入 random 库
import turtle  # 导入 turtle 库
import random
#import pygame
#from musicpl import*#导入我们生成临时音乐音乐的库,如果不需要临时生成音乐,可删除这段代码
#file = '2.mp3' #自己需要的音乐文件
#pygame.mixer.init()
#track = pygame.mixer.music.load(file)
#pygame.mixer.music.play(loops=-1)#循环播放音乐
ts = turtle.Turtle()#顶端祝福语
ty = turtle.Turtle() #月亮
tx = turtle.Turtle()  #星星
tt = turtle.Turtle() #树
th = turtle.Turtle() #房子
tths = turtle.Turtle() #诗
tend = turtle.Turtle() #结束语
tlx = turtle.Turtle() #流星
tlx.hideturtle()
ts.hideturtle()
ty.hideturtle()
tx.hideturtle()
tt.hideturtle()
th.hideturtle()
tths.hideturtle()
tend.hideturtle()
#tend.hideturtle()
turtle.colormode(255)  # 设置 RGB 色彩模式
turtle.bgcolor(255, 255, 255)

turtle.Screen().tracer(0,0)
turtle.Screen().screensize(1000, 800)
turtle.Screen().bgcolor("black")


def random_star():
    tx.penup()
    tx.color("white", "white")

    x = random.randint(-1000, 1000)
    y = random.randint(-800, 800)

    dot_size = random.random()*3

    tx.goto(x, y)
    tx.dot(dot_size)


for _ in range(1000):
    random_star()

turtle.Screen().tracer(1, 0)
turtle.hideturtle()

s1 = '中秋节快乐' 
s2 = ['暮', '云', '收', '尽', '溢', '清', '寒']
s3 = ['银', '汉', '无', '声', '转', '玉', '盘']
s4 = ['此', '生', '此', '夜', '不', '长', '好']
s5 = ['明', '月', '明', '年', '何', '处', '看']
s6 = '祝大家中秋快乐月圆梦圆阖家团圆!'

#圆的函数
def yuan():

    # 调整画圆的坐标
    ty.penup()
    ty.goto(0, -220)
    ty.pendown()

    # 绘制圆形
    ty.color((255, 215, 0))
    ty.begin_fill()
    ty.circle(200)
    ty.end_fill()


# 设置字体颜色及朝向
ts.color((245, 245, 245))
ts.setheading(0)

# 第一行祝福语
ts.penup()
ts.color("Gold")
ts.goto(-170, 220)
ts.pendown()
ts.write(s1, font=('STKaiti', 50, 'bold'))

#画诗的函数
def draw_shi(s,x,y):
    for i in range(len(s)):
        tths.penup()
        tths.color("white")
        tths.goto(x, y-i*50)
        tths.pendown()
        tths.write(s[i], font=('STKaiti', 30, 'bold'))

#画房子窗户的函数
def draw_home_chuang():
    th.pencolor("#FFD700")
    th.right(90)
    th.pendown()
    for i in range(4):
        th.forward(35)
        th.right(90)
    th.penup()

#画房子的函数
def draw_home():
    th.penup()
    th.pensize(5)
    th.pencolor("#FF6347")
    th.goto(-120, -150)
    th.pendown()
    th.fillcolor("#FF6347")
    th.begin_fill()
    for i in range(2):
        th.forward(180)
        th.right(90)
        th.forward(240)
        th.right(90)
    th.end_fill()

    th.fillcolor("#C76114")
    th.begin_fill()
    th.penup()
    th.pencolor("#C76114")
    th.goto(-140, 20)
    th.right(90)
    th.pendown()
    th.forward(280)
    th.left(110)
    th.forward(60)
    th.left(70)
    th.forward(239)
    th.left(70)
    th.forward(60)
    th.end_fill()

    th.fillcolor("#A0522D")
    th.begin_fill()
    th.pencolor("#A0522D")
    th.left(20)
    th.forward(6)
    th.left(90)
    th.forward(280)
    th.left(90)
    th.forward(6)
    th.end_fill()

    th.penup()
    th.fillcolor("#FFFFFF")
    th.begin_fill()
    th.goto(-100, -10)
    draw_home_chuang()
    th.end_fill()

    th.setheading(90)


    th.goto(60, -10)
    th.fillcolor("#FFFFFF")
    th.begin_fill()
    draw_home_chuang()
    th.end_fill()

# 画树的函数
def draw_tree(length):
    if length > 20:
        tt.speed(100)
        tt.color((128, 128, 128))
        tt.pensize(length / 10)
        tt.forward(length)
        angle = random.randint(10, 30)
        number = random.randint(5, 15)
        tt.right(angle)
        draw_tree(length - number)
        tt.left(angle * 2)
        draw_tree(length - number)
        tt.right(angle)
        tt.backward(length)
    else:
        tt.color((50, 205, 50))
        tt.begin_fill()
        tt.circle(8, 90)
        tt.left(90)
        tt.circle(8, 90)
        tt.left(90)
        tt.end_fill()
        tt.color((0, 100, 0))


yuan()
# 调整画图案的坐标
tt.setheading(90)
tt.penup()
tt.goto(0, -220)
tt.pendown()

# 画出图案
turtle.Screen().tracer(1, 3)#第一个参数为开关动画,第二个参数为速度,值越小速度越快
draw_tree(75)
turtle.Screen().tracer(1, 7)
draw_shi(s2, 210, 90)
draw_shi(s3, 260, 90)
time.sleep(1.6)
tt.clear()
tths.clear()
turtle.Screen().tracer(0, 0)
for _ in range(1000):
    random_star()
turtle.Screen().tracer(1, 5)
th.setheading(90)

draw_home()
turtle.Screen().tracer(1, 7)
draw_shi(s4, 200, 90)
draw_shi(s5, 250, 90)
turtle.Screen().tracer(1, 5)
time.sleep(1.6)
tths.clear()
th.clear()
ts.clear()

#结束语函数
tend.goto(-110, 0)
def end(a,b):
    turtle.tracer(False)
    tend.pencolor('#0000FF')
    for i in range(30):
        tend.write(s6[a:b], font=('STKaiti', i+1, 'bold'))
        tend.clear()
    time.sleep(1.8)
    turtle.update()


end(0,3)
end(3,7)
end(8,16)
end(17,24)

tend.penup
tend.goto(-150, -10)
tend.pencolor("red")
tend.write("中秋佳节", font=('STKaiti', 60, 'bold'))
tend.goto(-150, -60)
tend.pencolor("blue")
tend.write("制作人:Gifted spider", font=('STKaiti', 20, 'bold'))
turtle.tracer(False)
tlx.pencolor('white')
tlx.right(135)

#画流星函数
def draw_meteor():
    for i in range(5):
        tlx.pensize(i+1)
        tlx.fd(10)
    turtle.update()

while True:
    tlx.penup()
    tlx.goto(random.randint(-100, 300), 300)
    tlx.pendown()
    for i in range(10):
        draw_meteor()
        tlx.clear()
        time.sleep(0.07)
pygame.mixer.music.stop()
turtle.done()

运行过程中由于是随机取数生成轨迹,每个人的运行效果不太一样。

本地运行效果如下:

五、总结

以上就是今天要讲的内容,本文仅仅简单介绍了turtle库的基本使用,turtle库提供了能使我们快速便捷地进行图形绘制的方法,大家可以查阅相关文档进行深入学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值