一、前言
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)改变线条及颜色填充
当我们第一次打开一个新屏幕时,海龟开始是一个黑色的图形,并用黑色墨水绘制。为此,我们可以做两件事情:
- 改变海龟的颜色:将改变填充的颜色;
- 改变钢笔的颜色:将改变轮廓或墨水的颜色。
可以选择这两种。在改变颜色之前,增大海龟的大小,以帮助您更清楚地看到颜色差异。输入以下代码
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库提供了能使我们快速便捷地进行图形绘制的方法,大家可以查阅相关文档进行深入学习。
标签:turtle,draw,中秋节,AI,tt,th,90,fill,巧用 From: https://blog.csdn.net/maohaofei/article/details/142262955