python standard library turtle

python 标准库 turtle 海龟制图

turtle n 海龟

vi. 捕海龟,捕鳖; (船等)翻没,倾覆;

源码: Lib/turtle.py


概述

海龟绘图很适合用来引导孩子学习编程。 最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言。

请想象绘图区有一只机器海龟,起始位置在 x-y 平面的 (0, 0) 点。先执行 import turtle,再执行 turtle.forward(15),它将(在屏幕上)朝所面对的 x 轴正方向前进 15 像素,随着它的移动画出一条线段。再执行 turtle.right(25),它将原地右转 25 度。

通过组合使用此类命令,可以轻松地绘制出精美的形状和图案。

turtle 模块是基于 Python 标准发行版 2.5 以来的同名模块重新编写并进行了功能扩展。

新模块尽量保持了原模块的特点,并且(几乎)100%与其兼容。这就意味着初学编程者能够以交互方式使用模块的所有命令、类和方法——运行 IDLE 时注意加 -n 参数。

turtle 模块提供面向对象和面向过程两种形式的海龟绘图基本组件。由于它使用 tkinter 实现基本图形界面,因此需要安装了 Tk 支持的 Python 版本。

面向对象的接口主要使用“2+2”个类:

  1. TurtleScreen 类定义图形窗口作为绘图海龟的运动场。它的构造器需要一个 tkinter.CanvasScrolledCanvas 作为参数。应在 turtle 作为某个程序的一部分的时候使用。

    Screen() 函数返回一个 TurtleScreen 子类的单例对象。此函数应在 turtle 作为独立绘图工具时使用。作为一个单例对象,其所属的类是不可被继承的。

    TurtleScreen/Screen 的所有方法还存在对应的函数,即作为面向过程的接口组成部分。

  2. RawTurtle (别名: RawPen) 类定义海龟对象在 TurtleScreen 上绘图。它的构造器需要一个 Canvas, ScrolledCanvas 或 TurtleScreen 作为参数,以指定 RawTurtle 对象在哪里绘图。

    从 RawTurtle 派生出子类 Turtle (别名: Pen),该类对象在 Screen 实例上绘图,如果实例不存在则会自动创建。

    RawTurtle/Turtle 的所有方法也存在对应的函数,即作为面向过程的接口组成部分。

过程式接口提供与 ScreenTurtle 类的方法相对应的函数。函数名与对应的方法名相同。当 Screen 类的方法对应函数被调用时会自动创建一个 Screen 对象。当 Turtle 类的方法对应函数被调用时会自动创建一个 (匿名的) Turtle 对象。

如果屏幕上需要有多个海龟,就必须使用面向对象的接口。

可用的 Turtle 和 Screen 方法概览

Turtle 方法

海龟动作

画笔控制

海龟状态

使用事件

onclick() 当鼠标点击

onrelease() 当鼠标释放

ondrag() 当鼠标拖动

特殊海龟方法

begin_poly() 开始记录多边形

end_poly() 结束记录多边形

get_poly() 获取多边形

clone() 克隆

getturtle() | getpen() 获取海龟画笔

getscreen() 获取屏幕

setundobuffer() 设置撤消缓冲区

undobufferentries() 撤消缓冲区条目数

TurtleScreen/Screen 方法

RawTurtle/Turtle 方法和对应函数

本节中的大部分示例都使用 Turtle 类的一个实例,命名为 turtle

海龟动作

  • turtle.forward(distance)

  • turtle.fd(distance)

    参数distance – 一个数值 (整型或浮点型)海龟前进 distance 指定的距离,方向为海龟的朝向。

    1
    2
    3
    4
    5
    6
    7
    8
    >>> turtle.position()
    (0.00,0.00)
    >>> turtle.forward(25)
    >>> turtle.position()
    (25.00,0.00)
    >>> turtle.forward(-75)
    >>> turtle.position()
    (-50.00,0.00)

turtle.back(distance)

turtle.bk(distance)

turtle.backward(distance)

  • 参数 :distance – 一个数值

海龟后退 distance 指定的距离,方向与海龟的朝向相反。不改变海龟的朝向。

1
2
3
4
5
>>> turtle.position()
(0.00,0.00)
>>> turtle.backward(30)
>>> turtle.position()
(-30.00,0.00)

turtle.right(angle)

turtle.rt(angle)

  • 参数:angle – 一个数值 (整型或浮点型)

海龟右转 angle 个单位。(单位默认为角度,但可通过 degrees()radians() 函数改变设置。) 角度的正负由海龟模式确定,参见 mode()

1
2
3
4
5
>>> turtle.heading()
22.0
>>> turtle.right(45)
>>> turtle.heading()
337.0

turtle.left(angle)

turtle.lt(angle)

  • 参数:angle – 一个数值 (整型或浮点型)

海龟左转 angle 个单位。(单位默认为角度,但可通过 degrees()radians() 函数改变设置。) 角度的正负由海龟模式确定,参见 mode()

1
2
3
4
5
>>> turtle.heading()
22.0
>>> turtle.left(45)
>>> turtle.heading()
67.0

turtle.goto(x, y=None)

turtle.setpos(x, y=None)

turtle.setposition(x, y=None)

  • 参数:x – 一个数值或数值对/向量y – 一个数值或 None

如果 yNonex 应为一个表示坐标的数值对或 Vec2D 类对象 (例如 pos() 返回的对象).

海龟移动到一个绝对坐标。如果画笔已落下将会画线。不改变海龟的朝向。

1
2
3
4
5
6
7
8
9
10
11
12
>>> tp = turtle.pos()
>>> tp
(0.00,0.00)
>>> turtle.setpos(60,30)
>>> turtle.pos()
(60.00,30.00)
>>> turtle.setpos((20,80))
>>> turtle.pos()
(20.00,80.00)
>>> turtle.setpos(tp)
>>> turtle.pos()
(0.00,0.00)

turtle.setx(x)

  • 参数:x – 一个数值 (整型或浮点型)

设置海龟的横坐标为 x,纵坐标保持不变。

1
2
3
4
5
>>> turtle.position()
(0.00,240.00)
>>> turtle.setx(10)
>>> turtle.position()
(10.00,240.00)

turtle.sety(y)

  • 参数:y – 一个数值 (整型或浮点型)

设置海龟的纵坐标为 y,横坐标保持不变。

1
2
3
4
5
>>> turtle.position()
(0.00,40.00)
>>> turtle.sety(-10)
>>> turtle.position()
(0.00,-10.00)

turtle.setheading(to_angle)

turtle.seth(to_angle)

  • 参数:to_angle – 一个数值 (整型或浮点型)

设置海龟的朝向为 to_angle。以下是以角度表示的几个常用方向:

标准模式 logo 模式
0 - 东 0 - 北
90 - 北 90 - 东
180 - 西 180 - 南
270 - 南 270 - 西
1
2
3
>>> turtle.setheading(90)
>>> turtle.heading()
90.0

turtle.home()

海龟移至初始坐标 (0,0),并设置朝向为初始方向 (由海龟模式确定,参见 mode())。

1
2
3
4
5
6
7
8
9
>>> turtle.heading()
90.0
>>> turtle.position()
(0.00,-10.00)
>>> turtle.home()
>>> turtle.position()
(0.00,0.00)
>>> turtle.heading()
0.0

turtle.circle(radius, extent=None, steps=None)

三个参数:

  • radius – 一个数值
  • extent – 一个数值 (或 None)
  • steps – 一个整型数 (或 None)

绘制一个 radius 指定半径的圆。圆心在海龟左边 radius 个单位;extent 为一个夹角,用来决定绘制圆的一部分。如未指定 extent\则绘制整个圆。如果 *extent 不是完整圆周,则以当前画笔位置为一个端点绘制圆弧。如果 radius 为正值则朝逆时针方向绘制圆弧,否则朝顺时针方向。最终海龟的朝向会依据 extent* 的值而改变。

圆实际是以其内切正多边形来近似表示的,其边的数量由 steps 指定。如果未指定边数则会自动确定。此方法也可用来绘制正多边形。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> turtle.home()
>>> turtle.position()
(0.00,0.00)
>>> turtle.heading()
0.0
>>> turtle.circle(50)
>>> turtle.position()
(-0.00,0.00)
>>> turtle.heading()
0.0
>>> turtle.circle(120, 180) # draw a semicircle
>>> turtle.position()
(0.00,240.00)
>>> turtle.heading()
180.0

turtle.dot(size=None, *color)

  • 参数

    size – 一个整型数 >= 1 (如果指定)color – 一个颜色字符串或颜色数值元组

绘制一个直径为 size,颜色为 color 的圆点。如果 size 未指定,则直径取 pensize+4 和 2*pensize 中的较大值。

1
2
3
4
5
6
7
>>> turtle.home()
>>> turtle.dot()
>>> turtle.fd(50); turtle.dot(20, "blue"); turtle.fd(50)
>>> turtle.position()
(100.00,-0.00)
>>> turtle.heading()
0.0

turtle.stamp()

在海龟当前位置印制一个海龟形状。返回该印章的 stamp_id,印章可以通过调用 clearstamp(stamp_id) 来删除。

1
2
3
4
>>> turtle.color("blue")
>>> turtle.stamp()
11
>>> turtle.fd(50)

turtle.clearstamp(stampid)

  • 参数

    stampid – 一个整型数,必须是之前 stamp() 调用的返回值

删除 stampid 指定的印章。

1
2
3
4
5
6
7
8
9
10
>>> turtle.position()
(150.00,-0.00)
>>> turtle.color("blue")
>>> astamp = turtle.stamp()
>>> turtle.fd(50)
>>> turtle.position()
(200.00,-0.00)
>>> turtle.clearstamp(astamp)
>>> turtle.position()
(200.00,-0.00)

turtle.clearstamps(n=None)

  • 参数

    n – 一个整型数 (或 None)

删除全部或前/后 n 个海龟印章。如果 nNone 则删除全部印章,如果 n > 0 则删除前 n 个印章,否则如果 n < 0 则删除后 n 个印章。

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> for i in range(8):
... turtle.stamp(); turtle.fd(30)
13
14
15
16
17
18
19
20
>>> turtle.clearstamps(2)
>>> turtle.clearstamps(-2)
>>> turtle.clearstamps()

turtle.undo()

撤消 (或连续撤消) 最近的一个 (或多个) 海龟动作。可撤消的次数由撤消缓冲区的大小决定。

1
2
3
4
5
>>> for i in range(4):
... turtle.fd(50); turtle.lt(80)
...
>>> for i in range(8):
... turtle.undo()

turtle.speed(speed=None)

  • 参数

    speed – 一个 0..10 范围内的整型数或速度字符串 (见下)

设置海龟移动的速度为 0..10 表示的整型数值。如未指定参数则返回当前速度。

如果输入数值大于 10 或小于 0.5 则速度设为 0。速度字符串与速度值的对应关系如下:

  • “fastest”: 0 最快
  • “fast”: 10 快
  • “normal”: 6 正常
  • “slow”: 3 慢
  • “slowest”: 1 最慢

速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。

注意: speed = 0 表示 没有 动画效果。forward/back 将使海龟向前/向后跳跃,同样的 left/right 将使海龟立即改变朝向。

1
2
3
4
5
6
7
8
>>> turtle.speed()
3
>>> turtle.speed('normal')
>>> turtle.speed()
6
>>> turtle.speed(9)
>>> turtle.speed()
9

获取海龟的状态

turtle.position()

turtle.pos()

返回海龟当前的坐标 (x,y) (为 Vec2D 矢量类对象)。

1
2
>>> turtle.pos()
(440.00,-0.00)

urtle.towards(x, y=None)

  • 参数

    x – 一个数值或数值对/矢量,或一个海龟实例y – 一个数值——如果 x 是一个数值,否则为 None

从海龟位置到由 (x,y),矢量或另一海龟对应位置的连线的夹角。此数值依赖于海龟初始朝向 - 由 “standard”/“world” 或 “logo” 模式设置所决定)。

1
2
3
>>> turtle.goto(10, 10)
>>> turtle.towards(0,0)
225.0

turtle.xcor()

返回海龟的 x 坐标。

1
2
3
4
5
6
7
>>> turtle.home()
>>> turtle.left(50)
>>> turtle.forward(100)
>>> turtle.pos()
(64.28,76.60)
>>> print(round(turtle.xcor(), 5))
64.27876

turtle.ycor()

返回海龟的 y 坐标。

1
2
3
4
5
6
7
>>> turtle.home()
>>> turtle.left(60)
>>> turtle.forward(100)
>>> print(turtle.pos())
(50.00,86.60)
>>> print(round(turtle.ycor(), 5))
86.60254

turtle.heading()

返回海龟当前的朝向 (数值依赖于海龟模式参见 mode())。

1
2
3
4
>>> turtle.home()
>>> turtle.left(67)
>>> turtle.heading()
67.0

turtle.distance(x, y=None)

  • 参数

    x – 一个数值或数值对/矢量,或一个海龟实例y – 一个数值——如果 x 是一个数值,否则为 None

返回从海龟位置到由 (x,y),适量或另一海龟对应位置的单位距离。

1
2
3
4
5
6
7
8
9
>>> turtle.home()
>>> turtle.distance(30,40)
50.0
>>> turtle.distance((30,40))
50.0
>>> joe = Turtle()
>>> joe.forward(77)
>>> turtle.distance(joe)
77.0

度量单位设置

turtle.degrees(fullcircle=360.0)

  • 参数

    fullcircle – 一个数值

设置角度的度量单位,即设置一个圆周为多少 “度”。默认值为 360 度。

1
2
3
4
5
6
7
8
9
10
11
12
13
>>> turtle.home()
>>> turtle.left(90)
>>> turtle.heading()
90.0

Change angle measurement unit to grad (also known as gon,
grade, or gradian and equals 1/100-th of the right angle.)
>>> turtle.degrees(400.0)
>>> turtle.heading()
100.0
>>> turtle.degrees(360)
>>> turtle.heading()
90.0

turtle.radians()

设置角度的度量单位为弧度。其值等于 degrees(2*math.pi)

1
2
3
4
5
6
7
>>> turtle.home()
>>> turtle.left(90)
>>> turtle.heading()
90.0
>>> turtle.radians()
>>> turtle.heading()
1.5707963267948966

画笔控制

绘图状态

  • turtle.pendown()

  • turtle.pd()

  • turtle.down()

    画笔落下 – 移动时将画线。

  • turtle.penup()

  • turtle.pu()

  • turtle.up()

    画笔抬起 – 移动时不画线。

  • turtle.pensize(width=None)

  • turtle.width(width=None)

  • 参数

    width – 一个正数值

设置线条的粗细为 width 或返回该值。如果 resizemode 设为 “auto” 并且 turtleshape 为多边形,该多边形也以同样组细的线条绘制。如未指定参数,则返回当前的 pensize。

1
2
3
>>> turtle.pensize()
1
>>> turtle.pensize(10) # from here on lines of width 10 are drawn
  • turtle.pen(pen=None, **pendict)

    pen – 一个包含部分或全部下列键的字典

    pendict – 一个或多个以下列键为关键字的关键字参数

    返回或设置画笔的属性,以一个包含以下键值对的 “画笔字典” 表示:

    • “shown”: True/False
    • “pendown”: True/False
    • “pencolor”: 颜色字符串或颜色元组
    • “fillcolor”: 颜色字符串或颜色元组
    • “pensize”: 正数值
    • “speed”: 0..10 范围内的数值
    • “resizemode”: “auto” 或 “user” 或 “noresize”
    • “stretchfactor”: (正数值, 正数值)
    • “outline”: 正数值
    • “tilt”: 数值

此字典可作为后续调用 pen() 时的参数,以恢复之前的画笔状态。另外还可将这些属性作为关键词参数提交。使用此方式可以用一条语句设置画笔的多个属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> turtle.pen(fillcolor="black", pencolor="red", pensize=10)
>>> sorted(turtle.pen().items())
[('fillcolor', 'black'), ('outline', 1), ('pencolor', 'red'),
('pendown', True), ('pensize', 10), ('resizemode', 'noresize'),
('shearfactor', 0.0), ('shown', True), ('speed', 9),
('stretchfactor', (1.0, 1.0)), ('tilt', 0.0)]
>>> penstate=turtle.pen()
>>> turtle.color("yellow", "")
>>> turtle.penup()
>>> sorted(turtle.pen().items())[:3]
[('fillcolor', ''), ('outline', 1), ('pencolor', 'yellow')]
>>> turtle.pen(penstate, fillcolor="green")
>>> sorted(turtle.pen().items())[:3]
[('fillcolor', 'green'), ('outline', 1), ('pencolor', 'red')]

turtle.isdown()

如果画笔落下返回 True,如果画笔抬起返回 False

1
2
3
4
5
6
>>> turtle.penup()
>>> turtle.isdown()
False
>>> turtle.pendown()
>>> turtle.isdown()
True

颜色控制

turtle.pencolor(*args)

返回或设置画笔颜色。

允许以下四种输入格式:

  • pencolor()

    返回以颜色描述字符串或元组 (见示例) 表示的当前画笔颜色。可用作其他 color/pencolor/fillcolor 调用的输入。

  • pencolor(colorstring)

    设置画笔颜色为 colorstring 指定的 Tk 颜色描述字符串,例如 "red""yellow""#33cc8c"

  • pencolor((r, g, b))

    设置画笔颜色为以 r, g, b 元组表示的 RGB 颜色。r, g, b 的取值范围应为 0..colormode,colormode 的值为 1.0 或 255 (参见 colormode())。

  • pencolor(r, g, b)

    设置画笔颜色为以 r, g, b 表示的 RGB 颜色。r, g, b 的取值范围应为 0..colormode。如果 turtleshape 为多边形,该多边形轮廓也以新设置的画笔颜色绘制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> colormode()
1.0
>>> turtle.pencolor()
'red'
>>> turtle.pencolor("brown")
>>> turtle.pencolor()
'brown'
>>> tup = (0.2, 0.8, 0.55)
>>> turtle.pencolor(tup)
>>> turtle.pencolor()
(0.2, 0.8, 0.5490196078431373)
>>> colormode(255)
>>> turtle.pencolor()
(51.0, 204.0, 140.0)
>>> turtle.pencolor('#32c18f')
>>> turtle.pencolor()
(50.0, 193.0, 143.0)

turtle.fillcolor(*args)

返回或设置填充颜色。

允许以下四种输入格式:

  • fillcolor()

    返回以颜色描述字符串或元组 (见示例) 表示的当前填充颜色。可用作其他 color/pencolor/fillcolor 调用的输入。

  • fillcolor(colorstring)

    设置填充颜色为 colorstring 指定的 Tk 颜色描述字符串,例如 "red""yellow""#33cc8c"

  • fillcolor((r, g, b))

    设置填充颜色为以 r, g, b 元组表示的 RGB 颜色。r, g, b 的取值范围应为 0..colormode,colormode 的值为 1.0 或 255 (参见 colormode())。

  • fillcolor(r, g, b)

    设置填充颜色为 r, g, b 表示的 RGB 颜色。r, g, b 的取值范围应为 0..colormode。如果 turtleshape 为多边形,该多边形内部也以新设置的填充颜色填充。

1
2
3
4
5
6
7
8
9
10
11
>>> turtle.fillcolor("violet")
>>> turtle.fillcolor()
'violet'
>>> turtle.pencolor()
(50.0, 193.0, 143.0)
>>> turtle.fillcolor((50, 193, 143)) # Integers, not floats
>>> turtle.fillcolor()
(50.0, 193.0, 143.0)
>>> turtle.fillcolor('#ffffff')
>>> turtle.fillcolor()
(255.0, 255.0, 255.0)

turtle.color(*args)

返回或设置画笔颜色和填充颜色。

允许多种输入格式。使用如下 0 至 3 个参数:

  • color()

    返回以一对颜色描述字符串或元组表示的当前画笔颜色和填充颜色,两者可分别由 pencolor()fillcolor() 返回。

  • color(colorstring), color((r,g,b)), color(r,g,b)

    输入格式与 pencolor() 相同,同时设置填充颜色和画笔颜色为指定的值。

  • color(colorstring1, colorstring2), color((r1,g1,b1), (r2,g2,b2))

    相当于 pencolor(colorstring1)fillcolor(colorstring2),使用其他输入格式的方法也与之类似。如果 turtleshape 为多边形,该多边形轮廓与填充也使用新设置的颜色。

1
2
3
4
5
6
>>> turtle.color("red", "green")
>>> turtle.color()
('red', 'green')
>>> color("#285078", "#a0c8f0")
>>> color()
((40.0, 80.0, 120.0), (160.0, 200.0, 240.0))

另参见: Screen 方法 colormode()

填充

turtle.filling()

返回填充状态 (填充为 True,否则为 False)。

1
2
3
4
5
>>> turtle.begin_fill()
>>> if turtle.filling():
... turtle.pensize(5)
... else:
... turtle.pensize(3)
  • turtle.begin_fill()

    在绘制要填充的形状之前调用。

  • turtle.end_fill()

    填充上次调用 begin_fill() 之后绘制的形状。自相交多边形或多个形状间的重叠区域是否填充取决于操作系统的图形引擎、重叠的类型以及重叠的层数。 例如上面的 Turtle 多芒星可能会全部填充为黄色,也可能会有一些白色区域。

    1
    2
    3
    4
    >>> turtle.color("black", "red")
    >>> turtle.begin_fill()
    >>> turtle.circle(80)
    >>> turtle.end_fill()

更多绘图控制

  • turtle.reset()

    从屏幕中删除海龟的绘图,海龟回到原点并设置所有变量为默认值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    >>> turtle.goto(0,-22)
    >>> turtle.left(100)
    >>> turtle.position()
    (0.00,-22.00)
    >>> turtle.heading()
    100.0
    >>> turtle.reset()
    >>> turtle.position()
    (0.00,0.00)
    >>> turtle.heading()
    0.0
  • turtle.clear()

    从屏幕中删除指定海龟的绘图。不移动海龟。海龟的状态和位置以及其他海龟的绘图不受影响。

  • turtle.clear()

    从屏幕中删除指定海龟的绘图。不移动海龟。海龟的状态和位置以及其他海龟的绘图不受影响。

  • turtle.write(arg, move=False, align=”left”, font=(“Arial”, 8, “normal”))

    参数arg – 要书写到 TurtleScreen 的对象move – True/Falsealign – 字符串 “left”, “center” 或 “right”font – 一个三元组 (fontname, fontsize, fonttype)书写文本 - arg 指定的字符串 - 到当前海龟位置,align 指定对齐方式 (“left”, “center” 或 right”),font 指定字体。如果 move 为 True,画笔会移动到文本的右下角。默认 moveFalse

    1
    2
    turtle.write("Home = ", True, align="center")
    turtle.write((0,0), True)

海龟状态

可见性

  • turtle.hideturtle()

  • turtle.ht()

    使海龟不可见。当你绘制复杂图形时这是个好主意,因为隐藏海龟可显著加快绘制速度。>>> turtle.hideturtle()

  • turtle.showturtle()

    turtle.st()

    使海龟可见。

    1
    >>> turtle.showturtle()
  • turtle.isvisible()

    如果海龟显示返回 True,如果海龟隐藏返回 False

    1
    2
    3
    4
    5
    6
    >>> turtle.hideturtle()
    >>> turtle.isvisible()
    False
    >>> turtle.showturtle()
    >>> turtle.isvisible()
    True

外观

  • turtle.shape(name=None)

    • name – 一个有效的形状名字符串

    设置海龟形状为 name 指定的形状名,如未指定形状名则返回当前的形状名。name 指定的形状名应存在于 TurtleScreen 的 shape 字典中。多边形的形状初始时有以下几种: “arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”。要了解如何处理形状请参看 Screen 方法 register_shape()

    1
    2
    3
    4
    5
    >>> turtle.shape()
    'classic'
    >>> turtle.shape("turtle")
    >>> turtle.shape()
    'turtle'
  • turtle.resizemode(rmode=None)

    • 参数

      rmode – 字符串 “auto”, “user”, “noresize” 其中之一

    设置大小调整模式为以下值之一: “auto”, “user”, “noresize”。如未指定 rmode 则返回当前的大小调整模式。不同的大小调整模式的效果如下:

    • “auto”: 根据画笔粗细值调整海龟的外观。
    • “user”: 根据拉伸因子和轮廓宽度 (outline) 值调整海龟的外观,两者是由 shapesize() 设置的。
    • “noresize”: 不调整海龟的外观大小。

    大小调整模式 (“user”) 会在 shapesize() 带参数调用时生效。

    1
    2
    3
    4
    5
    >>> turtle.resizemode()
    'noresize'
    >>> turtle.resizemode("auto")
    >>> turtle.resizemode()
    'auto'

turtle.shapesize(stretch_wid=None, stretch_len=None, outline=None)

turtle.turtlesize(stretch_wid=None, stretch_len=None, outline=None)

  • 参数

    stretch_wid – 正数值stretch_len – 正数值outline – 正数值

返回或设置画笔的属性 x/y-拉伸因子和/或轮廓。设置大小调整模式为 “user”。当且仅当大小调整模式设为 “user” 时海龟会基于其拉伸因子调整外观: stretch_wid 为垂直于其朝向的宽度拉伸因子,stretch_len 为平等于其朝向的长度拉伸因子,决定形状轮廓线的粗细。

1
2
3
4
5
6
7
8
9
>>> turtle.shapesize()
(1.0, 1.0, 1)
>>> turtle.resizemode("user")
>>> turtle.shapesize(5, 5, 12)
>>> turtle.shapesize()
(5, 5, 12)
>>> turtle.shapesize(outline=8)
>>> turtle.shapesize()
(5, 5, 8)

turtle.shearfactor(shear=None)

  • 参数

    shear – 数值 (可选)

设置或返回当前的剪切因子。根据 share 指定的剪切因子即剪切角度的切线来剪切海龟形状。 改变海龟的朝向 (移动方向)。如未指定 shear 参数: 返回当前的剪切因子即剪切角度的切线,与海龟朝向平行的线条将被剪切。

1
2
3
4
5
>>> turtle.shape("circle")
>>> turtle.shapesize(5,2)
>>> turtle.shearfactor(0.5)
>>> turtle.shearfactor()
0.5

turtle.tilt(angle)

  • 参数

    angle – 一个数值

海龟形状自其当前的倾角转动 angle 指定的角度,但 改变海龟的朝向 (移动方向)。

1
2
3
4
5
6
7
>>> turtle.reset()
>>> turtle.shape("circle")
>>> turtle.shapesize(5,2)
>>> turtle.tilt(30)
>>> turtle.fd(50)
>>> turtle.tilt(30)
>>> turtle.fd(50)

turtle.settiltangle(angle)

  • 参数

    angle – 一个数值

旋转海龟形状使其指向 angle 指定的方向,忽略其当前的倾角, 改变海龟的朝向 (移动方向)。

1
2
3
4
5
6
7
>>> turtle.reset()
>>> turtle.shape("circle")
>>> turtle.shapesize(5,2)
>>> turtle.settiltangle(45)
>>> turtle.fd(50)
>>> turtle.settiltangle(-45)
>>> turtle.fd(50)

3.1 版后已移除.

turtle.tiltangle(angle=None)

  • 参数

    angle – 一个数值 (可选)

设置或返回当前的倾角。如果指定 angle 则旋转海龟形状使其指向 angle 指定的方向,忽略其当前的倾角。 改变海龟的朝向 (移动方向)。如果未指定 angle: 返回当前的倾角,即海龟形状的方向和海龟朝向 (移动方向) 之间的夹角。

1
2
3
4
5
6
>>> turtle.reset()
>>> turtle.shape("circle")
>>> turtle.shapesize(5,2)
>>> turtle.tilt(45)
>>> turtle.tiltangle()
45.0

turtle.shapetransform(t11=None, t12=None, t21=None, t22=None)

  • 参数

    t11 – 一个数值 (可选)t12 – 一个数值 (可选)t21 – 一个数值 (可选)t12 – 一个数值 (可选)

设置或返回海龟形状的当前变形矩阵。

如不指定任何矩阵元素,则返回以4元素元组表示的变形矩阵。否则使用指定元素设置变形矩阵改变海龟形状,矩阵第一排的值为 t11, t12,第二排的值为 t21, t22。行列式 t11 t22 - t12 t21 的值不能为零,否则会出错。根据指定的矩阵修改拉伸因子,剪切因子和倾角。

1
2
3
4
5
6
>>> turtle = Turtle()
>>> turtle.shape("square")
>>> turtle.shapesize(4,2)
>>> turtle.shearfactor(-0.5)
>>> turtle.shapetransform()
(4.0, -1.0, -0.0, 2.0)

turtle.get_shapepoly()

返回以坐标值对元组表示的当前形状多边形。这可以用于定义一个新形状或一个复合形状的多个组成部分。

1
2
3
4
>>> turtle.shape("square")
>>> turtle.shapetransform(4, -1, 0, 2)
>>> turtle.get_shapepoly()
((50, -20), (30, 20), (-50, 20), (-30, -20))
坚持原创技术分享,您的支持将鼓励我继续创作!