1. Turtle库详解
Python 标准库 - turtle — 海龟绘图 - 《Python 3.10.0 官方文档(全)》 - 书栈网 · BookStack
源码: Lib/turtle.py
1.1 概述
海龟绘图很适合用来引导孩子学习编程。 最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言。
请想象绘图区有一只机器海龟,起始位置在 x-y 平面的 (0, 0) 点。先执行 import turtle
,再执行 turtle.forward(15)
,它将(在屏幕上)朝所面对的 x 轴正方向前进 15 像素,随着它的移动画出一条线段。再执行 turtle.right(25)
,它将原地右转 25 度。
1.1.1 Turtle star
使用海龟绘图可以编写重复执行简单动作的程序画出精细复杂的形状。
import turtle as t
color('red', 'yellow')
t.begin_fill()
while True:
t.forward(200)
t.left(170)
if abs(pos()) < 1:
break
t.end_fill()
t.done()
通过组合使用此类命令,可以轻松地绘制出精美的形状和图案。
turtle
模块是基于 Python 标准发行版 2.5 以来的同名模块重新编写并进行了功能扩展。
新模块尽量保持了原模块的特点,并且(几乎)100%与其兼容。这就意味着初学编程者能够以交互方式使用模块的所有命令、类和方法——运行 IDLE 时注意加 -n
参数。
turtle 模块提供面向对象和面向过程两种形式的海龟绘图基本组件。由于它使用 tkinter
实现基本图形界面,因此需要安装了 Tk 支持的 Python 版本。
面向对象的接口主要使用“2+2”个类:
-
TurtleScreen
类定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas
或ScrolledCanvas
作为参数。应在turtle
作为某个程序的一部分的时候使用。Screen()
函数返回一个TurtleScreen
子类的单例对象。此函数应在turtle
作为独立绘图工具时使用。作为一个单例对象,其所属的类是不可被继承的。TurtleScreen/Screen 的所有方法还存在对应的函数,即作为面向过程的接口组成部分。
-
RawTurtle
(别名:RawPen
) 类定义海龟对象在TurtleScreen
上绘图。它的构造器需要一个Canvas
,ScrolledCanvas
或TurtleScreen
作为参数,以指定RawTurtle
对象在哪里绘图。从 RawTurtle 派生出子类
Turtle
(别名:Pen
),该类对象在Screen
实例上绘图,如果实例不存在则会自动创建。RawTurtle/Turtle 的所有方法也存在对应的函数,即作为面向过程的接口组成部分。
过程式接口提供与 Screen
和 Turtle
类的方法相对应的函数。函数名与对应的方法名相同。当 Screen 类的方法对应函数被调用时会自动创建一个 Screen 对象。当 Turtle 类的方法对应函数被调用时会自动创建一个 (匿名的) Turtle 对象。
如果屏幕上需要有多个海龟,就必须使用面向对象的接口。
注解
以下文档给出了函数的参数列表。对于方法来说当然还有额外的第一个参数 self,这里省略了。
1.2 可用的 Turtle 和 Screen 方法概览
1.2.1 Turtle 方法
1.2.1.1 海龟动作
-
移动和绘制
backward()
|bk()
|back()
后退goto()
|setpos()
|setposition()
前往/定位setx()
设置x坐标sety()
设置y坐标setheading()
|seth()
设置朝向home()
返回原点circle()
画圆dot()
画点stamp()
印章clearstamp()
清除印章clearstamps()
清除多个印章undo()
撤消speed()
速度 -
获取海龟的状态
position()
|pos()
位置towards()
目标方向xcor()
x坐标ycor()
y坐标heading()
朝向distance()
距离设置与度量单位
degrees()
角度radians()
弧度
1.2.1.2 画笔控制
-
绘图状态
pendown()
|pd()
|down()
画笔落下pen()
画笔isdown()
画笔是否落下颜色控制
color()
颜色pencolor()
画笔颜色fillcolor()
填充颜色填充
filling()
是否填充begin_fill()
开始填充end_fill()
结束填充更多绘图控制
reset()
重置clear()
清空write()
书写
1.2.1.3 海龟状态
-
可见性
showturtle()
|st()
显示海龟hideturtle()
|ht()
隐藏海龟isvisible()
是否可见外观
shape()
形状resizemode()
大小调整模式shapesize()
|turtlesize()
形状大小shearfactor()
剪切因子settiltangle()
设置倾角tiltangle()
倾角tilt()
倾斜get_shapepoly()
获取形状多边形
1.2.1.4 使用事件
onclick()
当鼠标点击
onrelease()
当鼠标释放
ondrag()
当鼠标拖动
特殊海龟方法
begin_poly()
开始记录多边形
end_poly()
结束记录多边形
get_poly()
获取多边形
clone()
克隆
getturtle()
| getpen()
获取海龟画笔
getscreen()
获取屏幕
setundobuffer()
设置撤消缓冲区
undobufferentries()
撤消缓冲区条目数
1.2.2 TurtleScreen/Screen 方法
1.2.2.1 窗口控制
bgcolor()
背景颜色
bgpic()
背景图片
screensize()
屏幕大小
setworldcoordinates()
设置世界坐标系
1.2.2.2 动画控制
delay()
延迟
tracer()
追踪
update()
更新
1.2.2.3 使用屏幕事件
listen()
监听
onkey()
| onkeyrelease()
当键盘按下并释放
onkeypress()
当键盘按下
onclick()
| onscreenclick()
当点击屏幕
ontimer()
当达到定时
mainloop()
| done()
主循环
1.2.2.4 设置与特殊方法
colormode()
颜色模式
getcanvas()
获取画布
getshapes()
获取形状
register_shape()
| addshape()
添加形状
turtles()
所有海龟
window_height()
窗口高度
window_width()
窗口宽度
1.2.2.5 输入方法
textinput()
文本输入
numinput()
数字输入
1.2.2.6 Screen 专有方法
bye()
退出
exitonclick()
当点击时退出
setup()
设置
title()
标题
1.3 RawTurtle/Turtle 方法和对应函数
本节中的大部分示例都使用 Turtle 类的一个实例,命名为 turtle
。
1.3.1 海龟动作
-
turtle.forward
(distance)turtle.fd
(distance)
-
参数
distance — 一个数值 (整型或浮点型)
海龟前进 distance 指定的距离,方向为海龟的朝向。
>>> 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 指定的距离,方向与海龟的朝向相反。不改变海龟的朝向。
>>> turtle.position()
(0.00,0.00)
>>> turtle.backward(30)
>>> turtle.position()
(-30.00,0.00)
3. turtle.right
(angle)
turtle.rt
(angle)
-
参数
angle — 一个数值 (整型或浮点型)
海龟右转 angle 个单位。(单位默认为角度,但可通过 degrees()
和 radians()
函数改变设置。) 角度的正负由海龟模式确定,参见 mode()
。
>>> turtle.heading()
0.0
>>> turtle.right(45)
>>> turtle.heading()
315.0
turtle.left
(angle)
turtle.lt
(angle)
-
参数
angle — 一个数值 (整型或浮点型)
海龟左转 angle 个单位。(单位默认为角度,但可通过 degrees()
和 radians()
函数改变。) 角度的正负由海龟模式确定<