python standard library turtle-2

python 标准库 turtle 海龟制图(续)

使用事件

  • turtle.onclick(fun, btn=1, add=None)

    参数fun – 一个函数,调用时将传入两个参数表示在画布上点击的坐标。btn – 鼠标按钮编号,默认值为 1 (鼠标左键)addTrueFalse – 如为 True 则将添加一个新绑定,否则将取代先前的绑定将 fun 指定的函数绑定到鼠标点击此海龟事件。如果 fun 值为 None,则移除现有的绑定。以下为使用匿名海龟即过程式的示例:

    1
    2
    3
    4
    5
    >>> def turn(x, y):
    ... left(180)
    ...
    >>> onclick(turn) # Now clicking into the turtle will turn it.
    >>> onclick(None) # event-binding will be removed
  • turtle.onrelease(fun, btn=1, add=None)

    • 参数

    fun – 一个函数,调用时将传入两个参数表示在画布上点击的坐标。btn – 鼠标按钮编号,默认值为 1 (鼠标左键)addTrueFalse – 如为 True 则将添加一个新绑定,否则将取代先前的绑定

    fun 指定的函数绑定到在此海龟上释放鼠标按键事件。如果 fun 值为 None,则移除现有的绑定。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> class MyTurtle(Turtle):
    ... def glow(self,x,y):
    ... self.fillcolor("red")
    ... def unglow(self,x,y):
    ... self.fillcolor("")
    ...
    >>> turtle = MyTurtle()
    >>> turtle.onclick(turtle.glow) # clicking on turtle turns fillcolor red,
    >>> turtle.onrelease(turtle.unglow) # releasing turns it to transparent.
  • turtle.ondrag(fun, btn=1, add=None)

    • 参数

      fun – 一个函数,调用时将传入两个参数表示在画布上点击的坐标。btn – 鼠标按钮编号,默认值为 1 (鼠标左键)addTrueFalse – 如为 True 则将添加一个新绑定,否则将取代先前的绑定

    fun 指定的函数绑定到在此海龟上移动鼠标事件。如果 fun 值为 None,则移除现有的绑定。

    注: 在海龟上移动鼠标事件之前应先发生在此海龟上点击鼠标事件。

    1
    >>> turtle.ondrag(turtle.goto)

    在此之后点击并拖动海龟可在屏幕上手绘线条 (如果画笔为落下)。

特殊海龟方法

  • turtle.begin_poly()

    开始记录多边形的顶点。当前海龟位置为多边形的第一个顶点。

  • turtle.end_poly()

    停止记录多边形的顶点。当前海龟位置为多边形的最后一个顶点。它将连线到第一个顶点。

  • turtle.get_poly()

    返回最新记录的多边形。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> turtle.home()
    >>> turtle.begin_poly()
    >>> turtle.fd(100)
    >>> turtle.left(20)
    >>> turtle.fd(30)
    >>> turtle.left(60)
    >>> turtle.fd(50)
    >>> turtle.end_poly()
    >>> p = turtle.get_poly()
    >>> register_shape("myFavouriteShape", p)
  • turtle.clone()

创建并返回海龟的克隆体,具有相同的位置、朝向和海龟属性。

1
2
>>> mick = Turtle()
>>> joe = mick.clone()
  • turtle.getturtle()

  • turtle.getpen()

返回海龟对象自身。唯一合理的用法: 作为一个函数来返回 “匿名海龟”:

1
2
3
4
>>> pet = getturtle()
>>> pet.fd(50)
>>> pet
<turtle.Turtle object at 0x...>
  • turtle.getscreen()

返回作为海龟绘图场所的 TurtleScreen 类对象。该对象将可调用 TurtleScreen 方法。

1
2
3
4
>>> ts = turtle.getscreen()
>>> ts
<turtle._Screen object at 0x...>
>>> ts.bgcolor("pink")
  • turtle.setundobuffer(size)

    • 参数

      size – 一个整型数值或 None

设置或禁用撤消缓冲区。如果 size 为一个整型数则将开辟一个指定大小的空缓冲区。size 表示可使用 undo() 方法/函数撤消的海龟命令的次数上限。如果 sizeNone 则禁用撤消缓冲区。

1
>>> turtle.setundobuffer(42)
  • turtle.undobufferentries()

返回撤销缓冲区里的条目数。

1
2
>>> while undobufferentries():
... undo()

复合形状

要使用由多个不同颜色多边形构成的复合海龟形状,你必须明确地使用辅助类 Shape,具体步骤如下:

  1. 创建一个空 Shape 对象,类型为 “compound”。

  2. 按照需要使用 addcomponent() 方法向此对象添加多个部件。

    例如:

    1
    2
    3
    4
    5
    >>> s = Shape("compound")
    >>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5))
    >>> s.addcomponent(poly1, "red", "blue")
    >>> poly2 = ((0,0),(10,-5),(-10,-5))
    >>> s.addcomponent(poly2, "blue", "red")
  3. 接下来将 Shape 对象添加到 Screen 对象的形状列表并使用它:

1
2
>>> register_shape("myshape", s)
>>> shape("myshape")

Shape 类在 register_shape() 方法的内部以多种方式使用。应用程序编写者 只有 在使用上述的复合形状时才需要处理 Shape 类。

TurtleScreen/Screen 方法及对应函数

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

窗口控制

  • turtle.bgcolor(*args)

    参数args – 一个颜色字符串或三个取值范围 0..colormode 内的数值或一个取值范围相同的数值3元组设置或返回 TurtleScreen 的背景颜色。

    1
    2
    3
    4
    5
    >>> screen.bgcolor()
    'orange'
    >>> screen.bgcolor("#800080")
    >>> screen.bgcolor()
    (128.0, 0.0, 128.0)
  • urtle.bgpic(picname=None)

    • 参数

      picname – 一个字符串, gif-文件名, "nopic", 或 None

    设置背景图片或返回当前背景图片名称。如果 picname 为一个文件名,则将相应图片设为背景。如果 picname"nopic",则删除当前背景图片。如果 picnameNone,则返回当前背景图片文件名。:

    1
    2
    3
    4
    5
    >>> screen.bgpic()
    'nopic'
    >>> screen.bgpic("landscape.gif")
    >>> screen.bgpic()
    "landscape.gif"
  • turtle.clear()

    turtle.clearscreen()

    从中删除所有海龟的全部绘图。将已清空的 TurtleScreen 重置为初始状态: 白色背景,无背景片,无事件绑定并启用追踪。

    此 TurtleScreen 方法作为全局函数时只有一个名字 clearscreen。全局函数 clear 所对应的是 Turtle 方法 clear

  • turtle.reset()

  • turtle.resetscreen()

    重置屏幕上的所有海龟为其初始状态。

  • turtle.reset()

    turtle.resetscreen()

    重置屏幕上的所有海龟为其初始状态。

    此 TurtleScreen 方法作为全局函数时只有一个名字 resetscreen。全局函数 reset 所对应的是 Turtle 方法 reset

  • turtle.screensize(canvwidth=None, canvheight=None, bg=None)

    • 参数

      canvwidth – 正整型数,以像素表示画布的新宽度值canvheight – 正整型数,以像素表示画面的新高度值bg – 颜色字符串或颜色元组,新的背景颜色

    如未指定任何参数,则返回当前的 (canvaswidth, canvasheight)。否则改变作为海龟绘图场所的画布大小。不改变绘图窗口。要观察画布的隐藏区域,可以使用滚动条。通过此方法可以令之前绘制于画布之外的图形变为可见。

    可见。

    1
    2
    3
    4
    5
    >>> screen.screensize()
    (400, 300)
    >>> screen.screensize(2000,1500)
    >>> screen.screensize()
    (2000, 1500)

    也可以用来寻找意外逃走的海龟 ;-)

  • turtle.setworldcoordinates(llx, lly, urx, ury)

    • 参数

      llx – 一个数值, 画布左下角的 x-坐标

      lly – 一个数值, 画布左下角的 y-坐标

      urx – 一个数值, 画面右上角的 x-坐标

      ury – 一个数值, 画布右上角的 y-坐标

    设置用户自定义坐标系并在必要时切换模式为 “world”。这会执行一次 screen.reset()。如果 “world” 模式已激活,则所有图形将根据新的坐标系重绘。

    注意: 在用户自定义坐标系中,角度可能显得扭曲。

    1
    2
    3
    4
    5
    6
    7
    >>> screen.reset()
    >>> screen.setworldcoordinates(-50,-7.5,50,7.5)
    >>> for _ in range(72):
    ... left(10)
    ...
    >>> for _ in range(8):
    ... left(45); fd(2) # a regular octagon

动画控制

  • turtle.delay(delay=None)

    • 参数

      delay – 正整型数

    设置或返回以毫秒数表示的延迟值 delay。(这约等于连续两次画布刷新的间隔时间。) 绘图延迟越长,动画速度越慢。

    可选参数:

    1
    2
    3
    4
    5
    >>> screen.delay()
    10
    >>> screen.delay(5)
    >>> screen.delay()
    5
  • turtle.tracer(n=None, delay=None)

    参数n – 非负整型数delay – 非负整型数启用/禁用海龟动画并设置刷新图形的延迟时间。如果指定 n 值,则只有每第 n 次屏幕刷新会实际执行。(可被用来加速复杂图形的绘制。) 如果调用时不带参数,则返回当前保存的 n 值。第二个参数设置延迟值 (参见 delay())。>>> screen.tracer(8, 25) >>> dist = 2 >>> for i in range(200): ... fd(dist) ... rt(90) ... dist += 2

  • turtle.update()

    执行一次 TurtleScreen 刷新。在禁用追踪时使用。

另参见 RawTurtle/Turtle 方法 speed()

使用屏幕事件

  • turtle.listen(xdummy=None, ydummy=None)

    设置焦点到 TurtleScreen (以便接收按键事件)。使用两个 Dummy 参数以便能够传递 listen() 给 onclick 方法。

  • turtle.onkey(fun, key)

  • turtle.onkeyrelease(fun, key)

    • 参数

      fun – 一个无参数的函数或 Nonekey – 一个字符串: 键 (例如 “a”) 或键标 (例如 “space”)

    绑定 fun 指定的函数到按键释放事件。如果 fun 值为 None,则移除事件绑定。注: 为了能够注册按键事件,TurtleScreen 必须得到焦点。(参见 method listen() 方法。)

    1
    2
    3
    4
    5
    6
    >>> def f():
    ... fd(50)
    ... lt(60)
    ...
    >>> screen.onkey(f, "Up")
    >>> screen.listen()
  • turtle.onkeypress(fun, key=None)

    • 参数

      fun – 一个无参数的函数或 Nonekey – 一个字符串: 键 (例如 “a”) 或键标 (例如 “space”)

    绑定 fun 指定的函数到指定键的按下事件。如未指定键则绑定到任意键的按下事件。注: 为了能够注册按键事件,必须得到焦点。(参见 listen() 方法。)

    1
    2
    3
    4
    5
    >>> def f():
    ... fd(50)
    ...
    >>> screen.onkey(f, "Up")
    >>> screen.listen()
  • turtle.onclick(fun, btn=1, add=None)

    turtle.onscreenclick(fun, btn=1, add=None)

    • 参数

      fun – 一个函数,调用时将传入两个参数表示在画布上点击的坐标。btn – 鼠标按钮编号,默认值为 1 (鼠标左键)addTrueFalse – 如为 True 则将添加一个新绑定,否则将取代先前的绑定

    绑定 fun 指定的函数到鼠标点击屏幕事件。如果 fun 值为 None,则移除现有的绑定。

    以下示例使用一个 TurtleScreen 实例 screen 和一个 Turtle 实例 turtle:

    1
    2
    3
    >>> screen.onclick(turtle.goto) # Subsequently clicking into the TurtleScreen will
    >>> # make the turtle move to the clicked point.
    >>> screen.onclick(None) # remove event binding again

    此 TurtleScreen 方法作为全局函数时只有一个名字 onscreenclick。全局函数 onclick 所对应的是 Turtle 方法 onclick

  • turtle.ontimer(fun, t=0)

    • 参数

      fun – 一个无参数的函数t – 一个数值 >= 0

    安装一个计时器,在 t 毫秒后调用 fun 函数。

    1
    2
    3
    4
    5
    6
    7
    8
    >>> running = True
    >>> def f():
    ... if running:
    ... fd(50)
    ... lt(60)
    ... screen.ontimer(f, 250)
    >>> f() ### makes the turtle march around
    >>> running = False
  • turtle.mainloop()

    turtle.done()

    开始事件循环 - 调用 Tkinter 的 mainloop 函数。必须作为一个海龟绘图程序的结束语句。如果一个脚本是在以 -n 模式 (无子进程) 启动的 IDLE 中运行时 不可 使用 - 用于实现海龟绘图的交互功能。

    1
    >>> screen.mainloop()

输入方法

  • turtle.textinput(title, prompt)

    参数title – 字符串prompt – 字符串弹出一个对话框窗口用来输入一个字符串。形参 title 为对话框窗口的标题,prompt 为一条文本,通常用来提示要输入什么信息。返回输入的字符串。如果对话框被取消则返回 None。:

    1
    >>> screen.textinput("NIM", "Name of first player:")
  • turtle.numinput(title, prompt, default=None, minval=None, maxval=None)

    • 参数

      title – 字符串prompt – 字符串default – 数值 (可选)minval – 数值 (可选)maxval – 数值 (可选)

    弹出一个对话框窗口用来输入一个数值。title 为对话框窗口的标题,prompt 为一条文本,通常用来描述要输入的数值信息。default: 默认值, minval: 可输入的最小值, maxval: 可输入的最大值。输入数值的必须在指定的 minval .. maxval 范围之内,否则将给出一条提示,对话框保持打开等待修改。返回输入的数值。如果对话框被取消则返回 None。:

    1
    >>> screen.numinput("Poker", "Your stakes:", 1000, minval=10, maxval=10000)

设置与特殊方法

turtle.mode(mode=None)

  • 参数

    mode – 字符串 “standard”, “logo” 或 “world” 其中之一

设置海龟模式 (“standard”, “logo” 或 “world”) 并执行重置。如未指定模式则返回当前的模式。

“standard” 模式与旧的 turtle 兼容。”logo” 模式与大部分 Logo 海龟绘图兼容。”world” 模式使用用户自定义的 “世界坐标系”。注意: 在此模式下,如果 x/y 单位比率不等于 1 则角度会显得扭曲。

模式 初始海龟朝向 正数角度
“standard” 朝右 (东) 逆时针
“logo” 朝上 (北) 顺时针
1
2
3
>>> mode("logo")   # resets turtle heading to north
>>> mode()
'logo'

turtle.colormode(cmode=None)

  • 参数

    cmode – 数值 1.0 或 255 其中之一

返回颜色模式或将其设为 1.0 或 255。构成颜色三元组的 r, g, b 数值必须在 0..cmode 范围之内。

1
2
3
4
5
6
7
8
9
10
11
>>> screen.colormode(1)
>>> turtle.pencolor(240, 160, 80)
Traceback (most recent call last):
...
TurtleGraphicsError: bad color sequence: (240, 160, 80)
>>> screen.colormode()
1.0
>>> screen.colormode(255)
>>> screen.colormode()
255
>>> turtle.pencolor(240,160,80)

turtle.getcanvas()

返回此 TurtleScreen 的 Canvas 对象。供了解 Tkinter 的 Canvas 对象内部机理的人士使用

1
2
3
>>> cv = screen.getcanvas()
>>> cv
<turtle.ScrolledCanvas object ...>

turtle.getshapes()

返回所有当前可用海龟形状的列表。

1
2
>>> screen.getshapes()
['arrow', 'blank', 'circle', ..., 'turtle']

turtle.register_shape(name, shape=None)

turtle.addshape(name, shape=None)

调用此函数有三种不同方式:

  1. name 为一个 gif 文件的文件名, shapeNone: 安装相应的图像形状。:

    1
    >>> screen.register_shape("turtle.gif")

    当海龟转向时图像形状 不会 转动,因此无法显示海龟的朝向!

  2. name 为指定的字符串,shape 为由坐标值对构成的元组: 安装相应的多边形形状。

    1
    >>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3)))
  1. name 为指定的字符串, 为一个 (复合) Shape 类对象: 安装相应的复合形状。

将一个海龟形状加入 TurtleScreen 的形状列表。只有这样注册过的形状才能通过执行 shape(shapename) 命令来使用。

turtle.turtles()

返回屏幕上的海龟列表。

1
2
>>> for turtle in screen.turtles():
... turtle.color("red")

turtle.window_height()

返回海龟窗口的高度。:

1
2
>>> screen.window_height()
480

turtle.window_width()

返回海龟窗口的宽度。:

1
2
>>> screen.window_width()
640

Screen 专有方法, 而非继承自 TurtleScreen

  • turtle.bye()

    关闭海龟绘图窗口。

  • turtle.exitonclick()

    将 bye() 方法绑定到 Screen 上的鼠标点击事件。如果配置字典中 “using_IDLE” 的值为 False (默认值) 则同时进入主事件循环。注: 如果启动 IDLE 时使用了 -n 开关 (无子进程),turtle.cfg 中此数值应设为 True。在此情况下 IDLE 本身的主事件循环同样会作用于客户脚本。

  • turtle.setup(width=_CFG[“width”], height=_CFG[“height”], startx=_CFG[“leftright”], starty=_CFG[“topbottom”])

    设置主窗口的大小和位置。默认参数值保存在配置字典中,可通过 turtle.cfg 文件进行修改。

    • width – 如为一个整型数值,表示大小为多少像素,如为一个浮点数值,则表示屏幕的占比;默认为屏幕的 50%
    • height – 如为一个整型数值,表示高度为多少像素,如为一个浮点数值,则表示屏幕的占比;默认为屏幕的 75%
    • startx – 如为正值,表示初始位置距离屏幕左边缘多少像素,负值表示距离右边缘,None 表示窗口水平居中
    • starty – 如为正值,表示初始位置距离屏幕上边缘多少像素,负值表示距离下边缘,None 表示窗口垂直居中
    1
    2
    3
    4
    >>> screen.setup (width=200, height=200, startx=0, starty=0)
    >>> # sets window to 200x200 pixels, in upper left of screen
    >>> screen.setup(width=.75, height=0.5, startx=None, starty=None)
    >>> # sets window to 75% of screen by 50% of screen and centers

turtle.title(titlestring)

  • 参数

    titlestring – 一个字符串,显示为海龟绘图窗口的标题栏文本

设置海龟窗口标题为 titlestring 指定的文本。

1
>>> screen.title("Welcome to the turtle zoo!")

公共类

  • class turtle.RawTurtle(canvas)

  • class turtle.RawPen(canvas)

    参数canvas – 一个 tkinter.Canvas , ScrolledCanvasTurtleScreen 类对象创建一个海龟。海龟对象具有 “Turtle/RawTurtle 方法” 一节所述的全部方法。

  • class turtle.Turtle

    RawTurtle 的子类,具有相同的接口,但其绘图场所为默认的 Screen 类对象,在首次使用时自动创建。

  • class turtle.TurtleScreen(cv)

    参数cv – 一个 tkinter.Canvas 类对象提供面向屏幕的方法例如 setbg() 等。说明见上文。

  • class turtle.Screen

    TurtleScreen 的子类,增加了四个方法.

  • class turtle.ScrolledCanvas(master)

    参数master – 可容纳 ScrolledCanvas 的 Tkinter 部件,即添加了滚动条的 Tkinter-canvas由 Screen 类使用,使其能够自动提供一个 ScrolledCanvas 作为海龟的绘图场所。

  • class turtle.Shape(type_, data)

    参数type_ – 字符串 “polygon”, “image”, “compound” 其中之一实现形状的数据结构。(type_, data) 必须遵循以下定义:

    | type_ | data |
    | ———- | ———————————————————— |
    | “polygon” | 一个多边形元组,即由坐标值对构成的元组 |
    | “image” | 一个图片 (此形式仅限内部使用!) |
    | “compound” | None (复合形状必须使用 addcomponent() 方法来构建) |

  • addcomponent(poly, fill, outline=None)

    • poly – 一个多边形,即由数值对构成的元组

    • fill – 一种颜色,将用来填充 poly 指定的多边形

    • outline – 一种颜色,用于多边形的轮廓 (如有指定)

      示例:

      1
      2
      3
      4
      >>> poly = ((0,0),(10,-5),(0,10),(-10,-5))
      >>> s = Shape("compound")
      >>> s.addcomponent(poly, "red", "blue")
      >>> # ... add more components and then use register_shape()

      参见 复合形状**

  • class turtle.Vec2D(x, y)

    一个二维矢量类,用来作为实现海龟绘图的辅助类。也可能在海龟绘图程序中使用。派生自元组,因此矢量也属于元组!

    提供的运算 (a, b 为矢量, k 为数值):

    • a + b 矢量加法
    • a - b 矢量减法
    • a * b 内积
    • k * aa * k 与标量相乘
    • abs(a) a 的绝对值
    • a.rotate(angle) 旋转

帮助与配置

如何使用帮助

Screen 和 Turtle 类的公用方法以文档字符串提供了详细的文档。因此可以利用 Python 帮助工具获取这些在线帮助信息:

  • 当使用 IDLE 时,输入函数/方法调用将弹出工具提示显示其签名和文档字符串的头几行。

  • 对文法或函数调用 help() 将显示其文档字符串:

    >>>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    >>> help(Screen.bgcolor)
    Help on method bgcolor in module turtle:

    bgcolor(self, *args) unbound turtle.Screen method
    Set or return backgroundcolor of the TurtleScreen.

    Arguments (if given): a color string or three numbers
    in the range 0..colormode or a 3-tuple of such numbers.


    >>> screen.bgcolor("orange")
    >>> screen.bgcolor()
    "orange"
    >>> screen.bgcolor(0.5,0,0.5)
    >>> screen.bgcolor()
    "#800080"

    >>> help(Turtle.penup)
    Help on method penup in module turtle:

    penup(self) unbound turtle.Turtle method
    Pull the pen up -- no drawing when moving.

    Aliases: penup | pu | up

    No argument

    >>> turtle.penup()

方法对应函数的文档字符串的形式会有一些修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
>>> help(bgcolor)
Help on function bgcolor in module turtle:

bgcolor(*args)
Set or return backgroundcolor of the TurtleScreen.

Arguments (if given): a color string or three numbers
in the range 0..colormode or a 3-tuple of such numbers.

Example::

>>> bgcolor("orange")
>>> bgcolor()
"orange"
>>> bgcolor(0.5,0,0.5)
>>> bgcolor()
"#800080"

>>> help(penup)
Help on function penup in module turtle:

penup()
Pull the pen up -- no drawing when moving.

Aliases: penup | pu | up

No argument

Example:
>>> penup()

这些修改版文档字符串是在导入时与方法对应函数的定义一起自动生成的。

文档字符串翻译为不同的语言

可使用工具创建一个字典,键为方法名,值为 Screen 和 Turtle 类公共方法的文档字符串。

  • turtle.write_docstringdict(filename=”turtle_docstringdict”)

    参数filename – 一个字符串,表示文件名创建文档字符串字典并将其写入 filename 指定的 Python 脚本文件。此函数必须显示地调用 (海龟绘图类并不使用此函数)。文档字符串字典将被写入到 Python 脚本文件 *filename*.py。该文件可作为模板用来将文档字符串翻译为不同语言。

如果你 (或你的学生) 想使用本国语言版本的 turtle 在线帮助,你必须翻译文档字符串并保存结果文件,例如 turtle_docstringdict_german.py.

如果你在 turtle.cfg 文件中加入了相应的条目,此字典将在导入模块时被读取并替代原有的英文版文档字符串。

在撰写本文档时已经有了德语和意大利语版的文档字符串字典。(更多需求请联系 glingl@aon.at)

如何配置 Screen 和 Turtle

内置的默认配置是模仿旧 turtle 模块的外观和行为,以便尽可能地与其保持兼容。

如果你想使用不同的配置,以便更好地反映此模块的特性或是更适合你的需求,例如在课堂中使用,你可以准备一个配置文件 turtle.cfg,该文件将在导入模块时被读取并根据其中的设定修改模块配置。

内置的配置对应以下的 turtle.cfg:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
width = 0.5
height = 0.75
leftright = None
topbottom = None
canvwidth = 400
canvheight = 300
mode = standard
colormode = 1.0
delay = 10
undobuffersize = 1000
shape = classic
pencolor = black
fillcolor = black
resizemode = noresize
visible = True
language = english
exampleturtle = turtle
examplescreen = screen
title = Python Turtle Graphics
using_IDLE = False

选定条目的简短说明:

  • 开头的四行对应 Screen.setup() 方法的参数。
  • 第 5 和 6 行对应 Screen.screensize() 方法的参数。
  • shape 可以是任何内置形状,即: arrow, turtle 等。更多信息可用 help(shape) 查看。
  • 如果你想使用无填充色 (即令海龟变透明),你必须写 fillcolor = "" (但 cfg 文件中所有非空字符串都不可加引号)。
  • 如果你想令海龟反映其状态,你必须使用 resizemode = auto
  • 如果你设置语言例如 language = italian 则文档字符串字典 turtle_docstringdict_italian.py 将在导入模块时被加载 (如果导入路径即 turtle 的目录中存在此文件。
  • exampleturtleexamplescreen 条目定义了相应对象在文档字符串中显示的名称。方法文档字符串转换为函数文档字符串时将从文档字符串中删去这些名称。
  • using_IDLE: 如果你经常使用 IDLE 并启用其 -n 开关 (“无子进程”) 则应将此项设为 True,这将阻止 exitonclick() 进入主事件循环。

turtle.cfg 文件可以保存于 turtle 所在目录,当前工作目录也可以有一个同名文件。后者会重载覆盖前者的设置。

Lib/turtledemo 目录中也有一个 turtle.cfg 文件。你可以将其作为示例进行研究,并在运行演示时查看其作用效果 (但最好不要在演示查看器中运行)。

turtledemo — 演示脚本集

turtledemo 包汇集了一组演示脚本。这些脚本可以通过以下命令打开所提供的演示查看器运行和查看:

1
python -m turtledemo

此外,你也可以单独运行其中的演示脚本。例如

1
python -m turtledemo.bytedesign

turtledemo 包目录中的内容:

  • 一个演示查看器 __main__.py,可用来查看脚本的源码并即时运行。
  • 多个脚本文件,演示 turtle 模块的不同特性。所有示例可通过 Examples 菜单打开。也可以单独运行每个脚本。
  • 一个 turtle.cfg 文件,作为说明如何编写并使用模块配置文件的示例模板。

演示脚本清单如下:

名称 描述 相关特性
bytedesign 复杂的传统海龟绘图模式 tracer(), delay, update()
chaos 绘制 Verhulst 动态模型,演示通过计算机的运算可能会生成令人惊叹的结果 世界坐标系
clock 绘制模拟时钟显示本机的当前时间 海龟作为表针, ontimer
colormixer 试验 r, g, b 颜色模式 ondrag() 当鼠标拖动
forest 绘制 3 棵广度优先树 随机化
fractalcurves 绘制 Hilbert & Koch 曲线 递归
lindenmayer 文化数学 (印度装饰艺术) L-系统
minimal_hanoi 汉诺塔 矩形海龟作为汉诺盘 (shape, shapesize)
nim 玩经典的“尼姆”游戏,开始时有三堆小棒,与电脑对战。 海龟作为小棒,事件驱动 (鼠标, 键盘)
paint 超极简主义绘画程序 onclick() 当鼠标点击
peace 初级技巧 海龟: 外观与动画
penrose 非周期性地使用风筝和飞镖形状铺满平面 stamp() 印章
planet_and_moon 模拟引力系统 复合开关, Vec2D
round_dance 两两相对并不断旋转舞蹈的海龟 复合形状, clone shapesize, tilt, get_shapepoly, update
sorting_animate 动态演示不同的排序方法 简单对齐, 随机化
tree 一棵 (图形化的) 广度优先树 (使用生成器) clone() 克隆
two_canvases 简单设计 两块画布上的海龟
wikipedia 一个来自介绍海龟绘图的维基百科文章的图案 clone(), undo()
yinyang 另一个初级示例 circle() 画圆

祝你玩得开心!

Python 2.6 之后的变化

  • Turtle.tracer(), Turtle.window_width()Turtle.window_height() 方法已被去除。具有这些名称和功能的方法现在只限于 Screen 类的方法。但其对应的函数仍然可用。(实际上在 Python 2.6 中这些方法就已经只是从对应的 TurtleScreen/Screen 类的方法复制而来。)
  • Turtle.fill() 方法已被去除。begin_fill()end_fill() 的行为则有细微改变: 现在每个填充过程必须以一个 end_fill() 调用来结束。
  • 新增了一个 Turtle.filling() 方法。该方法返回一个布尔值: 如果填充过程正在进行为 True,否则为 False。此行为相当于 Python 2.6 中不带参数的 fill() 调用。

Python 3.0 之后的变化

  • 新增了 Turtle.shearfactor(), Turtle.shapetransform()Turtle.get_shapepoly() 方法。这样就可以使用所有标准线性变换来调整海龟形状。Turtle.tiltangle() 的功能已被加强: 现在可被用来获取或设置倾角。Turtle.settiltangle() 已弃用。
  • 新增了 Screen.onkeypress() 方法作为对 Screen.onkey() 的补充,实际就是将行为绑定到 keyrelease 事件。后者相应增加了一个别名: Screen.onkeyrelease()
  • 新增了 Screen.mainloop() 方法。这样当仅需使用 Screen 和 Turtle 对象时不需要再额外导入 mainloop()
  • 新增了两个方法 Screen.textinput()Screen.numinput()。用来弹出对话框接受输入并分别返回字符串和数值。
  • 两个新的示例脚本 tdemo_nim.pytdemo_round_dance.py 被加入到 Lib/turtledemo 目录中。
坚持原创技术分享,您的支持将鼓励我继续创作!