0%

turtle文档

turtle — Turtle graphics for Tk

引言

Turtle图形库是一个极好的向小朋友们普及编程知识的方法。这是伟大的计算机大师Wally Feurzig和Seymour Papert在1966年创造的LOGO编程语言的一部分。

画图的机器乌龟,一开始是停留在画布二维x-y平面上(0,0)点上。看看下面的代码:

1
2
3
import turtle
turtle.forward(15)
turtle.right(25)

第一句代码是引用这个库。第二句代码是机器乌龟径直的往前移动15个像素,留下一条直线。第三句的代码是机器乌龟沿着顺时针扭转25度。

通过使用这些简单的命令,我们可以轻易的画出复杂的图形和漂亮的图片。

从Python2.5开始,turtle库就是python的一个标准库了,当前是这个库的重新实现版。

我们尝试把老的Turtle库全部重写了一次,确保几乎能100%兼容。这就意味着尝试学习使用这个库编程的同仁,在IDLE下通过运行-n参数,就可以使用这个库的所有命令(command),类库(class)以及方法(method)。

turtle模块提供了turtle图形绘制原语(primitive),不管是你使用面向对象(object-oriented)还是面向过程的编程方法(procedure-oriented)。因为turtle库是基于Tkinter库的图形模块编写的,所以要运行turtle库的前提是安装了Tk库。

面向对象的编程接口使用two+two的方式来命名:

  1. TurtleScreen类定义了一个图形的窗口(不管是windows,还是mac,或者是其他linux的桌面发行版),让用户驰骋其中。它的构造函数(constructor)需要传入Tkinter.CanvasScrolledCanvas的类作为参数。当程序调用了turtle的时候,会调用到这个窗口类。


    函数Screen()会返回一个单例(singleton)对象,这是TurtleScreen的子类。在turtle库被单独调用来画图的时候,就会用到了。作为一个单例对象,要继承它是做不到的。

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    2. ```RawTurtle```(别名```RawPen```)定义了一个turtle对象,用来在```TurtleScreen```上画图。因此它的构造函数需要```Canvas```、```ScrolledCanvas```或```TurtleScreen```类的对象作为参数,以确保```RawTurtle```对象知道在哪画图。<br/><br/>
    ```Turtle```是```RawTurtle```的派生类,大部分的时候会被用来在屏幕上画图。它的实例会被自动创建,如果发现它还没创建的话。<br/><br/>
    ```RawTurtle```/```Turtle```的类函数(method)也提供了对应的函数(function),供面向过程的编程方法使用。

    ```Screen```和```Turtle```类的所有类函数(method)都有对应的函数(function)实现。意味着在没有构造```Screen```和```Turtle```对象的时候,可以直接调用它的函数,因为在这个时候,```Screen```和```Turtle```的匿名对象在后台被悄悄的实例化了。

    ``````
    如果一个屏幕上需要用到多个turtle对象的时候,那就必须采用面向对象的方式来调用接口了。

    ## Turtle与Screen可以使用的类函数

    ### 光标(Turtle)函数

    #### 光标(Turtle)的动作
    ##### 移动和画图
    ```Python
    向前并留下线条
    forward() | fd()

    退后并留下线条
    backward() | bk() | back()

    右转
    right() | rt()

    左转
    left() | lt()

    直接跳跃到某个位置
    goto() | setpos() | setposition()

    横轴跳到某个位置,竖轴不动
    setx()

    竖轴跳到某个位置,横轴不动
    sety()

    光标角度调整
    setheading() | seth()

    重回开始的点
    home()

    画一个圆
    circle()

    画一个点
    dot()

    拷贝一个图形
    stamp()

    根据id删掉一个复制的图形
    clearstamp()

    根据id删掉一堆复制的图形
    clearstamps()

    撤销一个绘图动作
    undo()

    设置画图的速度
    speed()
    获取光标(Turtle)的状态
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    获取光标的位置信息
    position() | pos()

    获得当前位置相对于某个点的角度
    towards()

    获得光标的横坐标
    xcor()

    获得光标的纵坐标
    ycor()

    获得当前光标的角度信息
    heading()
    distance()
Setting and measurement
1
2
degrees()
radians()

Pen control

Drawing state
1
2
3
4
5
pendown() | pd() | down()
penup() | pu() | up()
pensize() | width()
pen()
isdown()
Color control
1
2
3
color()
pencolor()
fillcolor()
Filling
1
2
3
fill()
begin_fill()
end_fill()

More drawing control

1
2
3
reset()
clear()
write()

Turtle state

Visibility

1
2
3
showturtle() | st()
hideturtle() | ht()
isvisible()

Appearance

1
2
3
4
5
6
shape()
resizemode()
shapesize() | turtlesize()
settiltangle()
tiltangle()
tilt()

Using events

1
2
3
4
onclick()
onrelease()
ondrag()
mainloop() | done()

Special Turtle methods

1
2
3
4
5
6
7
8
9
10
11
begin_poly()
end_poly()
get_poly()
clone()
getturtle() | getpen()
getscreen()
setundobuffer()
undobufferentries()
tracer()
window_width()
window_height()

TurtleScreen/Screen 画布可用的函数

Window control

1
2
3
4
5
6
bgcolor()
bgpic()
clear() | clearscreen()
reset() | resetscreen()
screensize()
setworldcoordinates()

Animation control

1
2
3
delay()
tracer()
update()

Using screen events

1
2
3
4
listen()
onkey()
onclick() | onscreenclick()
ontimer()

Settings and special methods

1
2
3
4
5
6
7
8
mode()
colormode()
getcanvas()
getshapes()
register_shape() | addshape()
turtles()
window_height()
window_width()

Methods specific to Screen

1
2
3
4
bye()
exitonclick()
setup()
title()