浅谈Python库之turtle

一、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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CnLg.NJ

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值