turtle--- 海龟绘图
(点击查看官方文档。)
简介
import turtle #调用该库。Turtle的实例对象,默认命名为turtle。
turtle.forward(10)from turtle import * #调用方法时,可以省略写turtle对象。
之所以叫turtle,其实就是一个想象,在绘图区的箭头作为一支笔,用它来绘制图形。
turtle模块使用tkinter实现基本图形界面,因此需要安装了 Tk 支持的 Python 版本。
python3 -m tkinter #如果有这个模块会弹出一个小窗口。
turtle模块支持面向对象和过程,接口有2+2个类:
TurtleScreen类:定义图形窗口作为绘图场所。
派生的Screen子类,产生一个单例对象。
RawTurtle(也叫RawPen)类:定义如何绘图。
派生的子类Turtle(也叫Pen): 该类的对象在Screen实例上绘图。
上面TurtleScreen/Screen,RawTurtle/Turtle 的所有方法存在对应的函数,即作为面向过程的接口组成部分。
过程式接口提供与Screen和Turtle类的方法相对应的函数。函数名与对应的方法名相同。
当 Screen 类的方法对应函数被调用时会自动创建一个 Screen 对象。
当 Turtle 类的方法对应函数被调用时会自动创建一个 (匿名的) Turtle 对象。
⚠️官方文档非常详细。还包括大量演示脚本。
例子
例子,画五角星,五个。
from turtle import *
defdraw(x, y):
penup()#笔和纸分开,移动不绘画。
goto(x ,y)
pendown()
setheading(0)for i in range(5):
forward(40)
right(144)for x in range(0, 250, 50): #range(start, stop, step)
draw(x, 0)
官方第一个例子:
from turtle import *color('red', 'yellow')
begin_fill()whileTrue:
forward(200)
left(170)if abs(pos()) < 1:breakend_fill()
done()
这里的abs(pos())为什么返回数值并和1比较?
classVec2D(tuple):def __abs__(self):return (self[0]**2 + self[1]**2)**0.5
⚠️x^2 等同于 x**2 。
pos()返回的对象的类型:
>>>type(pos())
>>>dir(pos())
['__abs__', '__add__',...后面略
可以知道Vec2D实例对象有它自己的方法_abs_。
所以,上面的代码当回到(0, 0)即最开始的位置时,abs(pos()) 肯定小于1。中断循环。