Turtle 图形库简介

概述

Turtle是Python内置的图形库,它使用简单的指令控制一个"海龟"在屏幕上移动并绘制图形。Turtle源自Logo编程语言,是学习编程概念的优秀工具。

要使用Turtle,首先需要导入模块:import turtlefrom 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()