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的方式来命名:
TurtleScreen
类定义了一个图形的窗口(不管是windows,还是mac,或者是其他linux的桌面发行版),让用户驰骋其中。它的构造函数(constructor)需要传入Tkinter.Canvas
或ScrolledCanvas
的类作为参数。当程序调用了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
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
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()
|