Turtle 图形库简介
概述Turtle是Python内置的图形库,它使用简单的指令控制一个"海龟"在屏幕上移动并绘制图形。Turtle源自Logo编程语言,是学习编程概念的优秀工具。
要使用Turtle,首先需要导入模块:import turtle 或 from turtle import *
基本示例:创建一个Turtle窗口
import turtle
# 创建画布和画笔
screen = turtle.Screen()
screen.title("Python Turtle示例")
screen.bgcolor("white")
# 创建海龟
t = turtle.Turtle()
t.shape("turtle")
t.color("green")
# 移动海龟
t.forward(100)
t.left(90)
t.forward(100)
# 保持窗口打开
screen.mainloop()
移动控制函数
运动控制海龟移动的基本函数。海龟默认朝向屏幕右侧(0度方向)。
forward(distance)
向前移动指定像素距离
backward(distance)
向后移动指定像素距离
right(angle)
向右旋转指定角度(度)
left(angle)
向左旋转指定角度(度)
goto(x, y)
移动到指定坐标位置
setx(x)
设置x坐标,y坐标不变
sety(y)
设置y坐标,x坐标不变
示例:使用移动控制绘制一个三角形
import turtle
t = turtle.Turtle()
t.shape("turtle")
t.speed(3)
# 绘制三角形
for _ in range(3):
t.forward(100)
t.left(120)
# 移动海龟到新位置
t.penup()
t.goto(-50, -100)
t.pendown()
# 绘制正方形
for _ in range(4):
t.forward(80)
t.right(90)
t.hideturtle()
画笔控制函数
画笔控制画笔状态和属性的函数。可以控制画笔是否绘制、颜色、粗细等。
penup() 或 pu()
抬起画笔,移动时不绘制
pendown() 或 pd()
放下画笔,移动时绘制
pensize(width)
设置画笔宽度
color(color)
设置画笔颜色和填充颜色
pencolor(color)
设置画笔颜色
speed(speed)
设置画笔移动速度(1-10)
示例:画笔控制演示
import turtle
t = turtle.Turtle()
t.shape("turtle")
t.speed(5)
# 绘制红色粗线
t.pencolor("red")
t.pensize(5)
t.forward(100)
t.right(90)
# 绘制绿色中等线
t.pencolor("green")
t.pensize(3)
t.forward(100)
t.right(90)
# 抬起画笔,移动不绘制
t.penup()
t.forward(50)
t.pendown()
# 绘制蓝色细线
t.pencolor("blue")
t.pensize(1)
t.forward(100)
t.right(90)
# 绘制紫色虚线
t.pencolor("purple")
t.pensize(2)
for _ in range(10):
t.forward(10)
t.penup()
t.forward(5)
t.pendown()
t.hideturtle()
颜色与填充
颜色控制颜色和填充的函数。Turtle支持颜色名称字符串(如"red")、十六进制颜色码和RGB元组。
fillcolor(color)
设置填充颜色
begin_fill()
开始填充
end_fill()
结束填充
bgcolor(color)
设置背景颜色
示例:颜色填充演示
import turtle
t = turtle.Turtle()
t.shape("turtle")
t.speed(3)
# 绘制一个红色填充的正方形
t.fillcolor("red")
t.begin_fill()
for _ in range(4):
t.forward(80)
t.right(90)
t.end_fill()
# 移动到新位置
t.penup()
t.goto(100, 0)
t.pendown()
# 绘制一个绿色填充的圆
t.fillcolor("green")
t.begin_fill()
t.circle(50)
t.end_fill()
# 移动到新位置
t.penup()
t.goto(-100, -100)
t.pendown()
# 绘制一个蓝色填充的三角形
t.fillcolor("blue")
t.begin_fill()
for _ in range(3):
t.forward(100)
t.left(120)
t.end_fill()
# 移动到新位置
t.penup()
t.goto(0, -150)
t.pendown()
# 绘制一个黄色填充的五角星
t.fillcolor("yellow")
t.begin_fill()
for _ in range(5):
t.forward(100)
t.right(144)
t.end_fill()
t.hideturtle()
状态查询函数
查询查询海龟当前状态的函数,可用于获取位置、方向等信息。
position() 或 pos()
返回海龟当前坐标(x, y)
xcor()
返回海龟当前的x坐标
ycor()
返回海龟当前的y坐标
heading()
返回海龟当前的方向角度
isdown()
返回True如果画笔已放下
示例:状态查询演示
import turtle
t = turtle.Turtle()
t.shape("turtle")
t.speed(3)
# 移动海龟
t.forward(100)
t.left(45)
t.forward(70)
# 查询状态
print(f"当前位置: {t.position()}")
print(f"X坐标: {t.xcor()}")
print(f"Y坐标: {t.ycor()}")
print(f"当前方向: {t.heading()} 度")
print(f"画笔是否放下: {t.isdown()}")
# 继续移动
t.right(90)
t.forward(50)
# 再次查询
print(f"新位置: {t.position()}")
print(f"新方向: {t.heading()} 度")
t.hideturtle()
示例程序
示例以下是一些使用Turtle绘图的示例程序,展示了Turtle库的强大功能。
绘制彩色螺旋图案
import turtle
import colorsys
# 设置画布
screen = turtle.Screen()
screen.bgcolor("black")
# 创建画笔
t = turtle.Turtle()
t.speed(0)
t.width(2)
# 绘制彩色螺旋
size = 10
for i in range(200):
# 使用HSV颜色模型创建彩虹色
color = colorsys.hsv_to_rgb(i/200, 1.0, 1.0)
t.color(color)
t.forward(size)
t.right(91)
size += 1
t.hideturtle()
绘制花朵图案
import turtle
# 设置画布
screen = turtle.Screen()
screen.bgcolor("white")
# 创建画笔
t = turtle.Turtle()
t.speed(0)
t.width(2)
# 绘制花朵
colors = ["red", "orange", "yellow", "green", "blue", "purple"]
for i in range(36):
t.color(colors[i % 6])
# 绘制一个花瓣
for _ in range(2):
t.circle(100, 60)
t.left(120)
t.left(10) # 旋转准备绘制下一个花瓣
# 绘制花蕊
t.penup()
t.goto(0, -20)
t.pendown()
t.color("yellow")
t.begin_fill()
t.circle(20)
t.end_fill()
t.hideturtle()
绘制分形树
import turtle
# 递归绘制分形树
def draw_tree(branch_len, t):
if branch_len > 5:
# 绘制主干
t.forward(branch_len)
# 绘制右侧分支
t.right(20)
draw_tree(branch_len - 15, t)
# 绘制左侧分支
t.left(40)
draw_tree(branch_len - 15, t)
# 回到原始位置
t.right(20)
t.backward(branch_len)
# 设置画布
screen = turtle.Screen()
screen.bgcolor("white")
# 创建画笔
t = turtle.Turtle()
t.speed(0)
t.color("brown")
t.width(2)
# 调整位置
t.left(90)
t.penup()
t.backward(100)
t.pendown()
# 绘制分形树
draw_tree(100, t)
t.hideturtle()