一、turtle的基本介绍
Python 的 turtle
库是一个简单的绘图库,它允许用户创建图形和绘图。它通常用于教育目的,特别是用于向儿童介绍编程概念。turtle
库提供了一个绘图板和一个可以控制的小海龟(turtle),用户可以通过编写代码来控制海龟的移动,从而绘制各种图形。
- 窗口(Screen):
turtle
库中的窗口是一个绘图区域,海龟在这个区域内进行绘图。 - 海龟(Turtle):海龟是绘图的工具,可以通过代码控制其移动和绘制线条。
- 画布(Canvas):画布是海龟绘制图形的背景。
二、turtle的安装使用
安装和导入
turtle
库是 Python 的标准库之一,因此不需要额外安装。你只需要在你的 Python 脚本中导入它:
import turtle
基本使用
以下是一些基本的 turtle
函数和它们的用途:
turtle.forward(distance)
:让海龟向前移动指定的距离。turtle.backward(distance)
:让海龟向后移动指定的距离。turtle.left(angle)
:让海龟向左旋转指定的角度。turtle.right(angle)
:让海龟向右旋转指定的角度。turtle.penup()
:提起笔,移动时不绘制线条。turtle.pendown()
:放下笔,移动时绘制线条。turtle.goto(x, y)
:将海龟移动到指定的坐标位置。turtle.circle(radius)
:让海龟画一个半径为指定值的圆。turtle.done()
:结束绘图,保持窗口打开。
三、turtle的简单示例
下面是一个简单的示例,展示了如何使用 turtle
库绘制一个正方形:
import turtle
# 创建画布和海龟
screen = turtle.Screen()
t = turtle.Turtle()
# 绘制正方形
for _ in range(4):
t.forward(100)
t.left(90)
# 结束绘图
turtle.done()
运行这段代码,你将看到一个窗口,海龟在窗口中绘制一个边长为100像素的正方形。
四、turtle的详细示例
1. 绘制时钟
这个示例展示了如何使用 turtle
库来绘制一个时钟,包括时针、分针和秒针。
import turtle
import datetime
def create_pointer(length, name): # 创建指针方法
turtle.reset() # 删除图形归位
skip(-length * 0.1) # 抬笔移动指定距离
turtle.begin_poly() # 记录多边形
turtle.forward(length * 1.1) # 绘制指定长度的指针
turtle.end_poly() # 停止记录多边形
# 注册多边形状
turtle.register_shape(name, turtle.get_poly())
def init_pointer(): # 初始化指针
global secHand, minHand, hurHand, printer
turtle.mode("logo") # 重置Turtle指向上
create_pointer(135, "secHand") # 创建秒针图形
create_pointer(110, "minHand") # 创建分针图形
create_pointer(90, "hurHand") # 创建时针图形
secHand = turtle.Turtle() # 创建秒针turtle对象
secHand.shape("secHand") # 创建指定秒针名称的形状
minHand = turtle.Turtle() # 创建分针turtle对象
minHand.shape("minHand") # 创建指定分针名称的形状
hurHand = turtle.Turtle() # 创建时针turtle对象
hurHand.shape("hurHand") # 创建指定时针名称的形状
for hand in secHand, minHand, hurHand: # 循环遍历三个指针
hand.shapesize(1, 1, 5) # 设置形状拉伸大小和轮廓线
hand.speed(0) # 设置速度为最快
printer = turtle.Turtle() # 创建绘制文字的Turtle对象
printer.hideturtle() # 隐藏箭头
printer.penup() # 抬笔
def move_pointer(): # 移动指针的方法
# 不停的获取时间
t = datetime.datetime.today()
second = t.second + t.microsecond * 0.000001 # 计算移动的秒
minute = t.minute + second / 60 # 计算移动的分
hour = t.hour + minute / 60 # 计算移动的小时
secHand.setheading(6 * second) # 设置秒针的角度
minHand.setheading(6 * minute) # 设置分针的角度
hurHand.setheading(30 * hour) # 设置时针的角度
turtle.tracer(False) # 关闭绘画效果
printer.forward(65) # 向上移动65
# 绘制星期
printer.write(get_week(t), align="center", font=("Courier", 14, "bold"))
printer.back(130) # 倒退130
# 绘制年月日
printer.write(t.strftime('%Y-%m-%d'), align="center", font=("Courier", 14, "bold"))
printer.home() # 归位
turtle.tracer(True) # 开启绘画效果
turtle.ontimer(move_pointer, 10) # 10毫秒后调用move_pointer()方法
init_pointer()
move_pointer()
turtle.done()
2. 绘制复杂图案
这个示例展示了如何使用 turtle
库来绘制一个复杂的花朵图案。
import turtle
# 创建窗口和海龟对象
screen = turtle.Screen()
t = turtle.Turtle()
# 绘制花朵
t.color("red")
t.begin_fill()
for _ in range(36):
t.circle(100, 60) # 绘制弧
t.left(120) # 左转120度
t.circle(100, 60) # 绘制弧
t.left(60) # 左转60度
t.end_fill()
# 完成绘图
turtle.done()
3. 事件处理
这个示例展示了如何使用 turtle
库来处理键盘事件,控制海龟的移动。
import turtle
# 创建窗口和海龟对象
screen = turtle.Screen()
t = turtle.Turtle()
# 定义移动函数
def move_forward():
t.forward(10)
def move_backward():
t.backward(10)
def turn_left():
t.left(10)
def turn_right():
t.right(10)
# 绑定键盘事件
screen.listen() # 开始监听事件
screen.onkey(move_forward, "w") # W键前进
screen.onkey(move_backward, "s") # S键后退
screen.onkey(turn_left, "a") # A键左转
screen.onkey(turn_right, "d") # D键右转
# 完成绘图
turtle.done()