📜  Python中的 turtle.register_shape()函数(1)

📅  最后修改于: 2023-12-03 15:34:24.611000             🧑  作者: Mango

Python中的turtle.register_shape()函数

turtle.register_shape()函数是Python turtle库中的一个函数,用于注册自定义的形状。在turtle库中,可以通过turtle.Turtle()函数创建一个乌龟对象,该对象可以根据需要使用不同形状的图案。turtle.register_shape()函数的作用就是让用户可以自定义乌龟的形状,从而实现更为丰富的绘图效果。

语法
turtle.register_shape(name, shape=None)
  • name: 自定义形状的名称,必须是字符串类型。
  • shape: 自定义形状的坐标序列,可以是一个元组或列表类型。如果未指定该参数,则函数返回一个TurtleShape对象,可以通过该对象手动添加坐标序列。
参数说明

对于name参数,用户可自定义一个乌龟形状的名称。名称必须是字符串类型,且不允许出现空格等特殊字符。如果名称已经被其他自定义形状使用,则不允许重复注册。

对于shape参数,用户需要定义一个形状坐标序列。坐标序列可以是一个元组或列表,元素为(x, y)的二元组。每一个坐标代表着乌龟在前进时要改变方向的位置。坐标起始点为(0, 0),表示乌龟起始位置。坐标序列可以指定一个闭合曲线,乌龟会在这条曲线上不断“爬行”。

  • shape示例1:绘制一个矩形
rectangle = ((0,0),(0,30),(50,30),(50,0))
turtle.register_shape("rectangle", rectangle)

该坐标序列由4个坐标点构成,首尾两点相连,形成一个矩形。

  • shape示例2:绘制一个五角星
star = ((0,0),(50,0),(70,-40),(90,0),(140,0),(100,40),(120,80),(70,50),(20,80),
        (40,40))
turtle.register_shape("star", star)

该坐标序列由10个坐标点构成,首尾两点相连,形成一个五角星。

这里需要注意的是,坐标序列指定的坐标值并非代表直线距离,而是在平面坐标系中的坐标点。如果需绘制更复杂的形状,可以通过先绘制一个大的外框,再在其中绘制更为复杂的线段,通过组合不同的线段,最终可以呈现各种精美复杂的图案。

使用示例
import turtle

# 定义一个矩形
rectangle = ((0,0),(0,30),(50,30),(50,0))
turtle.register_shape("rectangle", rectangle)

# 定义一个五角星
star = ((0,0),(50,0),(70,-40),(90,0),(140,0),(100,40),(120,80),(70,50),(20,80), (40,40))
turtle.register_shape("star", star)

# 创建画布
canvas = turtle.Screen()

# 创建乌龟对象
myturtle = turtle.Turtle()

# 设置画笔颜色和大小
myturtle.pencolor("red")
myturtle.pensize(3)

# 设置乌龟形状为矩形
myturtle.shape("rectangle")

# 画出矩形
myturtle.stamp()

# 设置乌龟形状为五角星
myturtle.shape("star")

# 画出五角星
myturtle.stamp()

# 隐藏笔迹,完成绘图
myturtle.hideturtle()

# 停止画布退出程序
turtle.done()

程序运行效果如下: