文章目录
turtle — 海龟绘图
源码: Lib/turtle.py
概述
海龟绘图很适合用来引导孩子学习编程。 最初来自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所创造的 Logo 编程语言。
请想象绘图区有一只机器海龟,起始位置在 x-y 平面的 (0, 0) 点。先执行 import turtle,再执行 turtle.forward(15),它将(在屏幕上)朝所面对的 x 轴正方向前进 15 像素,随着它的移动画出一条线段。再执行 turtle.right(25),它将原地右转 25 度。
Turtle star
使用海龟绘图可以编写重复执行简单动作的程序画出精细复杂的形状。
from turtle import *
color(\'red\', \'yellow\')
begin_fill()
while True:
forward(200)
left(170)
if abs(pos()) < 1:
break
end_fill()
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,这里省略了。
可用的 Turtle 和 Screen 方法概览
Turtle 方法
-
海龟动作
移动和绘制
forward()|fd()前进backward()|bk()|back()后退right()|rt()右转left()|lt()左转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()弧度 -
画笔控制
绘图状态
pendown()|pd()|down()画笔落下penup()|pu()|up()画笔抬起pensize()|width()画笔粗细pen()画笔isdown()画笔是否落下颜色控制color()颜色pencolor()画笔颜色fillcolor()填充颜色填充filling()是否填充begin_fill()开始填充end_fill()结束填充更多绘图控制reset()重置clear()清空write()书写 -
海龟状态
可见性
showturtle()|st()显示海龟hideturtle()|ht()隐藏海龟isvisible()是否可见外观shape()形状resizemode()大小调整模式shapesize()|turtlesize()形状大小shearfactor()剪切因子settiltangle()设置倾角tiltangle()倾角tilt()倾斜shapetransform()变形get_shapepoly()获取形状多边形 -
使用事件
onclick()当鼠标点击onrelease()当鼠标释放ondrag()当鼠标拖动 -
特殊海龟方法
begin_poly()开始记录多边形end_poly()结束记录多边形get_poly()获取多边形clone()克隆getturtle()|getpen()获取海龟画笔getscreen()获取屏幕setundobuffer()设置撤消缓冲区undobufferentries()撤消缓冲区条目数
TurtleScreen/Screen 方法
-
窗口控制
bgcolor()背景颜色bgpic()背景图片clear()|clearscreen()清屏reset()|resetscreen()重置screensize()屏幕大小setworldcoordinates()设置世界坐标系 -
动画控制
-
使用屏幕事件
listen()监听onkey()|onkeyrelease()当键盘按下并释放onkeypress()当键盘按下onclick()|onscreenclick()当点击屏幕ontimer()当达到定时mainloop()|done()主循环 -
设置与特殊方法
mode()模式colormode()颜色模式getcanvas()获取画布getshapes()获取形状register_shape()|addshape()添加形状turtles()所有海龟window_height()窗口高度window_width()窗口宽度 -
输入方法
textinput()文本输入numinput()数字输入 -
Screen 专有方法
bye()退出exitonclick()当点击时退出setup()设置title()标题
RawTurtle/Turtle 方法和对应函数
本节中的大部分示例都使用 Turtle 类的一个实例,命名为 turtle。
海龟动作
-
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) -
turtle.``right(angle) -
turtle.``rt(angle)参数angle – 一个数值 (整型或浮点型)海龟右转 angle 个单位。(单位默认为角度,但可通过
degrees()和radians()函数改变设置。) 角度的正负由海龟模式确定,参见mode()。>>> turtle.heading() 22.0 >>> turtle.right(45) >>> turtle.heading() 337.0 -
turtle.``left(angle) -
turtle.``lt(angle)参数angle – 一个数值 (整型或浮点型)海龟左转 angle 个单位。(单位默认为角度,但可通过
degrees()和radians()函数改变设置。) 角度的正负由海龟模式确定,参见mode()。>>> turtle.heading() 22.0 >>> turtle.left(45) >>> turtle.heading() 67.0 -
turtle.``goto(x, y=None) -
turtle.``setpos(x, y=None) -
turtle.``setposition(x, y=None)参数x – 一个数值或数值对/向量y – 一个数值或
None如果 y 为None,x 应为一个表示坐标的数值对或Vec2D类对象 (例如pos()返回的对象).海龟移动到一个绝对坐标。如果画笔已落下将会画线。不改变海龟的朝向。>>> tp = turtle.pos() >>> tp (0.00,0.00) >>> turtle.setpos(60,30) >>> turtle.pos() (60.00,30.00) >>> turtle.setpos((20,80)) >>> turtle.pos() (20.00,80.00) >>> turtle.setpos(tp) >>> turtle.pos() (0.00,0.00) -
turtle.``setx(x)参数x – 一个数值 (整型或浮点型)设置海龟的横坐标为 x,纵坐标保持不变。
>>> turtle.position() (0.00,240.00) >>> turtle.setx(10) >>> turtle.position() (10.00,240.00) -
turtle.``sety(y)参数y – 一个数值 (整型或浮点型)设置海龟的纵坐标为 y,横坐标保持不变。
>>> turtle.position() (0.00,40.00) >>> turtle.sety(-10) >>> turtle.position() (0.00,-10.00) -
turtle.``setheading(to_angle) -
turtle.``seth(to_angle)参数to_angle – 一个数值 (整型或浮点型)设置海龟的朝向为 to_angle。以下是以角度表示的几个常用方向:标准模式logo 模式0 - 东0 - 北90 - 北90 - 东180 - 西180 - 南270 - 南270 - 西
>>> turtle.setheading(90) >>> turtle.heading() 90.0 -
turtle.``home()海龟移至初始坐标 (0,0),并设置朝向为初始方向 (由海龟模式确定,参见
mode())。>>> turtle.heading() 90.0 >>> turtle.position() (0.00,-10.00) >>> turtle.home() >>> turtle.position() (0.00,0.00) >>> turtle.heading() 0.0 -
turtle.``circle(radius, extent=None, steps=None)参数radius – 一个数值extent – 一个数值 (或
None)steps – 一个整型数 (或None)绘制一个 radius 指定半径的圆。圆心在海龟左边 radius 个单位;extent 为一个夹角,用来决定绘制圆的一部分。如未指定 extent*则绘制整个圆。如果 *extent 不是完整圆周,则以当前画笔位置为一个端点绘制圆弧。如果 radius 为正值则朝逆时针方向绘制圆弧,否则朝顺时针方向。最终海龟的朝向会依据 extent 的值而改变。圆实际是以其内切正多边形来近似表示的,其边的数量由 steps 指定。如果未指定边数则会自动确定。此方法也可用来绘制正多边形。>>> turtle.home() >>> turtle.position() (0.00,0.00) >>> turtle.heading() 0.0 >>> turtle.circle(50) >>> turtle.position() (-0.00,0.00) >>> turtle.heading() 0.0 >>> turtle.circle(120, 180) # draw a semicircle >>> turtle.position() (0.00,240.00) >>> turtle.heading() 180.0 -
turtle.``dot(size=None, *color)参数size – 一个整型数 >= 1 (如果指定)color – 一个颜色字符串或颜色数值元组绘制一个直径为 size,颜色为 color 的圆点。如果 size 未指定,则直径取 pensize+4 和 2*pensize 中的较大值。
>>> turtle.home() >>> turtle.dot() >>> turtle.fd(50); turtle.dot(20, "blue"); turtle.fd(50) >>> turtle.position() (100.00,-0.00) >>> turtle.heading() 0.0 -
turtle.``stamp()在海龟当前位置印制一个海龟形状。返回该印章的 stamp_id,印章可以通过调用
clearstamp(stamp_id)来删除。>>> turtle.color("blue") >>> turtle.stamp() 11 >>> turtle.fd(50) -
turtle.``clearstamp(stampid)参数stampid – 一个整型数,必须是之前
stamp()调用的返回值删除 stampid 指定的印章。>>> turtle.position() (150.00,-0.00) >>> turtle.color("blue") >>> astamp = turtle.stamp() >>> turtle.fd(50) >>> turtle.position() (200.00,-0.00) >>> turtle.clearstamp(astamp) >>> turtle.position() (200.00,-0.00) -
turtle.``clearstamps(n=None)参数n – 一个整型数 (或
None)删除全部或前/后 n 个海龟印章。如果 n 为None则删除全部印章,如果 n > 0 则删除前 n 个印章,否则如果 n < 0 则删除后 n 个印章。>>> for i in range(8): ... turtle.stamp(); turtle.fd(30) 13 14 15 16 17 18 19 20 >>> turtle.clearstamps(2) >>> turtle.clearstamps(-2) >>> turtle.clearstamps() -
turtle.``undo()撤消 (或连续撤消) 最近的一个 (或多个) 海龟动作。可撤消的次数由撤消缓冲区的大小决定。
>>> for i in range(4): ... turtle.fd(50); turtle.lt(80) ... >>> for i in range(8): ... turtle.undo() -
turtle.``speed(speed=None)参数speed – 一个 0…10 范围内的整型数或速度字符串 (见下)设置海龟移动的速度为 0…10 表示的整型数值。如未指定参数则返回当前速度。如果输入数值大于 10 或小于 0.5 则速度设为 0。速度字符串与速度值的对应关系如下:“fastest”: 0 最快"fast": 10 快"normal": 6 正常"slow": 3 慢"slowest": 1 最慢速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。注意: speed = 0 表示 没有 动画效果。forward/back 将使海龟向前/向后跳跃,同样的 left/right 将使海龟立即改变朝向。
>>> turtle.speed() 3 >>> turtle.speed(\'normal\') >>> turtle.speed() 6 >>> turtle.speed(9) >>> turtle.speed() 9
获取海龟的状态
-
turtle.``position() -
turtle.``pos()返回海龟当前的坐标 (x,y) (为
Vec2D矢量类对象)。>>> turtle.pos() (440.00,-0.00) -
turtle.``towards(x, y=None)参数x – 一个数值或数值对/矢量,或一个海龟实例y – 一个数值——如果 x 是一个数值,否则为
None从海龟位置到由 (x,y),矢量或另一海龟对应位置的连线的夹角。此数值依赖于海龟初始朝向 - 由 “standard”/“world” 或 “logo” 模式设置所决定)。>>> turtle.goto(10, 10) >>> turtle.towards(0,0) 225.0 -
turtle.``xcor()返回海龟的 x 坐标。
>>> turtle.home() >>> turtle.left(50) >>> turtle.forward(100) >>> turtle.pos() (64.28,76.60) >>> print(round(turtle.xcor(), 5)) 64.27876 -
turtle.``ycor()返回海龟的 y 坐标。
>>> turtle.home() >>> turtle.left(60) >>> turtle.forward(100) >>> print(turtle.pos()) (50.00,86.60) >>> print(round(turtle.ycor(), 5)) 86.60254 -
turtle.``heading()返回海龟当前的朝向 (数值依赖于海龟模式参见
mode())。>>> turtle.home() >>> turtle.left(67) >>> turtle.heading() 67.0 -
turtle.``distance(x, y=None)参数x – 一个数值或数值对/矢量,或一个海龟实例y – 一个数值——如果 x 是一个数值,否则为
None返回从海龟位置到由 (x,y),适量或另一海龟对应位置的单位距离。>>> turtle.home() >>> turtle.distance(30,40) 50.0 >>> turtle.distance((30,40)) 50.0 >>> joe = Turtle() >>> joe.forward(77) >>> turtle.distance(joe) 77.0
度量单位设置
-
turtle.``degrees(fullcircle=360.0)参数fullcircle – 一个数值设置角度的度量单位,即设置一个圆周为多少 “度”。默认值为 360 度。
>>> turtle.home() >>> turtle.left(90) >>> turtle.heading() 90.0 Change angle measurement unit to grad (also known as gon, grade, or gradian and equals 1/100-th of the right angle.) >>> turtle.degrees(400.0) >>> turtle.heading() 100.0 >>> turtle.degrees(360) >>> turtle.heading() 90.0 -
turtle.``radians()设置角度的度量单位为弧度。其值等于
degrees(2*math.pi)。>>> turtle.home() >>> turtle.left(90) >>> turtle.heading() 90.0 >>> turtle.radians() >>> turtle.heading() 1.5707963267948966
画笔控制
绘图状态
-
turtle.``pendown() -
turtle.``pd() -
turtle.``down()画笔落下 – 移动时将画线。
-
turtle.``penup() -
turtle.``pu() -
turtle.``up()画笔抬起 – 移动时不画线。
-
turtle.``pensize(width=None) -
turtle.``width(width=None)参数width – 一个正数值设置线条的粗细为 width 或返回该值。如果 resizemode 设为 “auto” 并且 turtleshape 为多边形,该多边形也以同样组细的线条绘制。如未指定参数,则返回当前的 pensize。
>>> turtle.pensize() 1 >>> turtle.pensize(10) # from here on lines of width 10 are drawn -
turtle.``pen(pen=None, **pendict)参数pen – 一个包含部分或全部下列键的字典pendict – 一个或多个以下列键为关键字的关键字参数返回或设置画笔的属性,以一个包含以下键值对的 “画笔字典” 表示:“shown”: True/False"pendown": True/False"pencolor": 颜色字符串或颜色元组"fillcolor": 颜色字符串或颜色元组"pensize": 正数值"speed": 0…10 范围内的数值"resizemode": “auto” 或 “user” 或 “noresize”“stretchfactor”: (正数值, 正数值)“outline”: 正数值"tilt": 数值此字典可作为后续调用
pen()时的参数,以恢复之前的画笔状态。另外还可将这些属性作为关键词参数提交。使用此方式可以用一条语句设置画笔的多个属性。>>> turtle.pen(fillcolor="black", pencolor="red", pensize=10) >>> sorted(turtle.pen().items()) [(\'fillcolor\', \'black\'), (\'outline\', 1), (\'pencolor\', \'red\'), (\'pendown\', True), (\'pensize\', 10), (\'resizemode\', \'noresize\'), (\'shearfactor\', 0.0), (\'shown\', True), (\'speed\', 9), (\'stretchfactor\', (1.0, 1.0)), (\'tilt\', 0.0)] >>> penstate=turtle.pen() >>> turtle.color("yellow", "") >>> turtle.penup() >>> sorted(turtle.pen().items())[:3] [(\'fillcolor\', \'\'), (\'outline\', 1), (\'pencolor\', \'yellow\')] >>> turtle.pen(penstate, fillcolor="green") >>> sorted(turtle.pen().items())[:3] [(\'fillcolor\', \'green\'), (\'outline\', 1), (\'pencolor\', \'red\')] -
turtle.``isdown()如果画笔落下返回
True,如果画笔抬起返回False。>>> turtle.penup() >>> turtle.isdown() False >>> turtle.pendown() >>> turtle.isdown() True
颜色控制
-
turtle.``pencolor(*args)返回或设置画笔颜色。允许以下四种输入格式:
pencolor()返回以颜色描述字符串或元组 (见示例) 表示的当前画笔颜色。可用作其他 color/pencolor/fillcolor 调用的输入。pencolor(colorstring)设置画笔颜色为 colorstring 指定的 Tk 颜色描述字符串,例如"red"、"yellow"或"#33cc8c"。pencolor((r, g, b))设置画笔颜色为以 r, g, b 元组表示的 RGB 颜色。r, g, b 的取值范围应为 0…colormode,colormode 的值为 1.0 或 255 (参见colormode())。pencolor(r, g, b)设置画笔颜色为以 r, g, b 表示的 RGB 颜色。r, g, b 的取值范围应为 0…colormode。如果 turtleshape 为多边形,该多边形轮廓也以新设置的画笔颜色绘制。>>> colormode() 1.0 >>> turtle.pencolor() \'red\' >>> turtle.pencolor("brown") >>> turtle.pencolor() \'brown\' >>> tup = (0.2, 0.8, 0.55) >>> turtle.pencolor(tup) >>> turtle.pencolor() (0.2, 0.8, 0.5490196078431373) >>> colormode(255) >>> turtle.pencolor() (51.0, 204.0, 140.0) >>> turtle.pencolor(\'#32c18f\') >>> turtle.pencolor() (50.0, 193.0, 143.0) -
turtle.``fillcolor(*args)返回或设置填充颜色。允许以下四种输入格式:
fillcolor()返回以颜色描述字符串或元组 (见示例) 表示的当前填充颜色。可用作其他 color/pencolor/fillcolor 调用的输入。fillcolor(colorstring)设置填充颜色为 colorstring 指定的 Tk 颜色描述字符串,例如"red"、"yellow"或"#33cc8c"。fillcolor((r, g, b))设置填充颜色为以 r, g, b 元组表示的 RGB 颜色。r, g, b 的取值范围应为 0…colormode,colormode 的值为 1.0 或 255 (参见colormode())。fillcolor(r, g, b)设置填充颜色为 r, g, b 表示的 RGB 颜色。r, g, b 的取值范围应为 0…colormode。如果 turtleshape 为多边形,该多边形内部也以新设置的填充颜色填充。>>> turtle.fillcolor("violet") >>> turtle.fillcolor() \'violet\' >>> turtle.pencolor() (50.0, 193.0, 143.0) >>> turtle.fillcolor((50, 193, 143)) # Integers, not floats >>> turtle.fillcolor() (50.0, 193.0, 143.0) >>> turtle.fillcolor(\'#ffffff\') >>> turtle.fillcolor() (255.0, 255.0, 255.0) -
turtle.``color(*args)返回或设置画笔颜色和填充颜色。允许多种输入格式。使用如下 0 至 3 个参数:
color()返回以一对颜色描述字符串或元组表示的当前画笔颜色和填充颜色,两者可分别由pencolor()和fillcolor()返回。color(colorstring),color((r,g,b)),color(r,g,b)输入格式与pencolor()相同,同时设置填充颜色和画笔颜色为指定的值。color(colorstring1, colorstring2),color((r1,g1,b1), (r2,g2,b2))相当于pencolor(colorstring1)加fillcolor(colorstring2),使用其他输入格式的方法也与之类似。如果 turtleshape 为多边形,该多边形轮廓与填充也使用新设置的颜色。>>> turtle.color("red", "green") >>> turtle.color() (\'red\', \'green\') >>> color("#285078", "#a0c8f0") >>> color() ((40.0, 80.0, 120.0), (160.0, 200.0, 240.0))
另参见: Screen 方法 colormode()。
填充
-
turtle.``filling()返回填充状态 (填充为
True,否则为False)。>>> turtle.begin_fill() >>> if turtle.filling(): ... turtle.pensize(5) ... else: ... turtle.pensize(3) -
turtle.``begin_fill()在绘制要填充的形状之前调用。
-
turtle.``end_fill()填充上次调用
begin_fill()之后绘制的形状。自相交多边形或多个形状间的重叠区域是否填充取决于操作系统的图形引擎、重叠的类型以及重叠的层数。 例如上面的 Turtle 多芒星可能会全部填充为黄色,也可能会有一些白色区域。>>> turtle.color("black", "red") >>> turtle.begin_fill() >>> turtle.circle(80) >>> turtle.end_fill()
更多绘图控制
-
turtle.``reset()从屏幕中删除海龟的绘图,海龟回到原点并设置所有变量为默认值。
>>> turtle.goto(0,-22) >>> turtle.left(100) >>> turtle.position() (0.00,-22.00) >>> turtle.heading() 100.0 >>> turtle.reset() >>> turtle.position() (0.00,0.00) >>> turtle.heading() 0.0 -
turtle.``clear()从屏幕中删除指定海龟的绘图。不移动海龟。海龟的状态和位置以及其他海龟的绘图不受影响。
-
turtle.``write(arg, move=False, align=“left”, font=(“Arial”, 8, “normal”))参数arg – 要书写到 TurtleScreen 的对象move – True/Falsealign – 字符串 “left”, “center” 或 “right"font – 一个三元组 (fontname, fontsize, fonttype)书写文本 - arg 指定的字符串 - 到当前海龟位置,align 指定对齐方式 (“left”, “center” 或 right”),font 指定字体。如果 move 为 True,画笔会移动到文本的右下角。默认 move 为
False。>>>>>> turtle.write("Home = ", True, align="center") >>> turtle.write((0,0), True)
海龟状态
可见性
-
turtle.``hideturtle() -
turtle.``ht()使海龟不可见。当你绘制复杂图形时这是个好主意,因为隐藏海龟可显著加快绘制速度。
>>> turtle.hideturtle() -
turtle.``showturtle() -
turtle.``st()使海龟可见。
>>> turtle.showturtle() -
turtle.``isvisible()如果海龟显示返回
True,如果海龟隐藏返回False。>>>>>> turtle.hideturtle() >>> turtle.isvisible() False >>> turtle.showturtle() >>> turtle.isvisible() True
外观
-
turtle.``shape(name=None)参数name – 一个有效的形状名字符串设置海龟形状为 name 指定的形状名,如未指定形状名则返回当前的形状名。name 指定的形状名应存在于 TurtleScreen 的 shape 字典中。多边形的形状初始时有以下几种: “arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”。要了解如何处理形状请参看 Screen 方法
register_shape()。>>> turtle.shape() \'classic\' >>> turtle.shape("turtle") >>> turtle.shape() \'turtle\' -
turtle.``resizemode(rmode=None)参数rmode – 字符串 “auto”, “user”, “noresize” 其中之一设置大小调整模式为以下值之一: “auto”, “user”, “noresize”。如未指定 rmode 则返回当前的大小调整模式。不同的大小调整模式的效果如下:“auto”: 根据画笔粗细值调整海龟的外观。“user”: 根据拉伸因子和轮廓宽度 (outline) 值调整海龟的外观,两者是由
shapesize()设置的。“noresize”: 不调整海龟的外观大小。大小调整模式 (“user”) 会在shapesize()带参数调用时生效。>>> turtle.resizemode() \'noresize\' >>> turtle.resizemode("auto") >>> turtle.resizemode() \'auto\' -
turtle.``shapesize(stretch_wid=None, stretch_len=None, outline=None) -
turtle.``turtlesize(stretch_wid=None, stretch_len=None, outline=None)参数stretch_wid – 正数值stretch_len – 正数值outline – 正数值返回或设置画笔的属性 x/y-拉伸因子和/或轮廓。设置大小调整模式为 “user”。当且仅当大小调整模式设为 “user” 时海龟会基于其拉伸因子调整外观: stretch_wid 为垂直于其朝向的宽度拉伸因子,stretch_len 为平等于其朝向的长度拉伸因子,决定形状轮廓线的粗细。
>>> turtle.shapesize() (1.0, 1.0, 1) >>> turtle.resizemode("user") >>> turtle.shapesize(5, 5, 12) >>> turtle.shapesize() (5, 5, 12) >>> turtle.shapesize(outline=8) >>> turtle.shapesize() (5, 5, 8) -
turtle.``shearfactor(shear=None)参数shear – 数值 (可选)设置或返回当前的剪切因子。根据 share 指定的剪切因子即剪切角度的切线来剪切海龟形状。不 改变海龟的朝向 (移动方向)。如未指定 shear 参数: 返回当前的剪切因子即剪切角度的切线,与海龟朝向平行的线条将被剪切。
>>> turtle.shape("circle") >>> turtle.shapesize(5,2) >>> turtle.shearfactor(0.5) >>> turtle.shearfactor() 0.5 -
turtle.``tilt(angle)参数angle – 一个数值海龟形状自其当前的倾角转动 angle 指定的角度,但 不 改变海龟的朝向 (移动方向)。
>>> turtle.reset() >>> turtle.shape("circle") >>> turtle.shapesize(5,2) >>> turtle.tilt(30) >>> turtle.fd(50) >>> turtle.tilt(30) >>> turtle.fd(50) -
turtle.``settiltangle(angle)参数angle – 一个数值旋转海龟形状使其指向 angle 指定的方向,忽略其当前的倾角,不 改变海龟的朝向 (移动方向)。
>>> turtle.reset() >>> turtle.shape("circle") >>> turtle.shapesize(5,2) >>> turtle.settiltangle(45) >>> turtle.fd(50) >>> turtle.settiltangle(-45) >>> turtle.fd(50)3.1 版后已移除. -
turtle.``tiltangle(angle=None)参数angle – 一个数值 (可选)设置或返回当前的倾角。如果指定 angle 则旋转海龟形状使其指向 angle 指定的方向,忽略其当前的倾角。不 改变海龟的朝向 (移动方向)。如果未指定 angle: 返回当前的倾角,即海龟形状的方向和海龟朝向 (移动方向) 之间的夹角。
>>> turtle.reset() >>> turtle.shape("circle") >>> turtle.shapesize(5,2) >>> turtle.tilt(45) >>> turtle.tiltangle() 45.0 -
turtle.``shapetransform(t11=None, t12=None, t21=None, t22=None)参数t11 – 一个数值 (可选)t12 – 一个数值 (可选)t21 – 一个数值 (可选)t12 – 一个数值 (可选)设置或返回海龟形状的当前变形矩阵。如不指定任何矩阵元素,则返回以4元素元组表示的变形矩阵。否则使用指定元素设置变形矩阵改变海龟形状,矩阵第一排的值为 t11, t12,第二排的值为 t21, t22。行列式 t11 * t22 - t12 * t21 的值不能为零,否则会出错。根据指定的矩阵修改拉伸因子,剪切因子和倾角。
>>> turtle = Turtle() >>> turtle.shape("square") >>> turtle.shapesize(4,2) >>> turtle.shearfactor(-0.5) >>> turtle.shapetransform() (4.0, -1.0, -0.0, 2.0) -
turtle.``get_shapepoly()返回以坐标值对元组表示的当前形状多边形。这可以用于定义一个新形状或一个复合形状的多个组成部分。
>>> turtle.shape("square") >>> turtle.shapetransform(4, -1, 0, 2) >>> turtle.get_shapepoly() ((50, -20), (30, 20), (-50, 20), (-30, -20))
使用事件
-
turtle.``onclick(fun, btn=1, add=None)参数fun – 一个函数,调用时将传入两个参数表示在画布上点击的坐标。btn – 鼠标按钮编号,默认值为 1 (鼠标左键)add –
True或False– 如为True则将添加一个新绑定,否则将取代先前的绑定将 fun 指定的函数绑定到鼠标点击此海龟事件。如果 fun 值为None,则移除现有的绑定。以下为使用匿名海龟即过程式的示例:>>> 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 (鼠标左键)add –
True或False– 如为True则将添加一个新绑定,否则将取代先前的绑定将 fun 指定的函数绑定到在此海龟上释放鼠标按键事件。如果 fun 值为None,则移除现有的绑定。>>> 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 (鼠标左键)add –
True或False– 如为True则将添加一个新绑定,否则将取代先前的绑定将 fun 指定的函数绑定到在此海龟上移动鼠标事件。如果 fun 值为None,则移除现有的绑定。注: 在海龟上移动鼠标事件之前应先发生在此海龟上点击鼠标事件。>>> turtle.ondrag(turtle.goto)在此之后点击并拖动海龟可在屏幕上手绘线条 (如果画笔为落下)。
特殊海龟方法
-
turtle.``begin_poly()开始记录多边形的顶点。当前海龟位置为多边形的第一个顶点。
-
turtle.``end_poly()停止记录多边形的顶点。当前海龟位置为多边形的最后一个顶点。它将连线到第一个顶点。
-
turtle.``get_poly()返回最新记录的多边形。
>>> 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()创建并返回海龟的克隆体,具有相同的位置、朝向和海龟属性。
>>> mick = Turtle() >>> joe = mick.clone() -
turtle.``getturtle() -
turtle.``getpen()返回海龟对象自身。唯一合理的用法: 作为一个函数来返回 “匿名海龟”:
>>> pet = getturtle() >>> pet.fd(50) >>> pet -
turtle.``getscreen()返回作为海龟绘图场所的
TurtleScreen类对象。该对象将可调用 TurtleScreen 方法。>>> ts = turtle.getscreen() >>> ts >>> ts.bgcolor("pink") -
turtle.``setundobuffer(size)参数size – 一个整型数值或
None设置或禁用撤消缓冲区。如果 size 为一个整型数则将开辟一个指定大小的空缓冲区。size 表示可使用undo()方法/函数撤消的海龟命令的次数上限。如果 size 为None则禁用撤消缓冲区。>>> turtle.setundobuffer(42) -
turtle.``undobufferentries()返回撤销缓冲区里的条目数。
>>> while undobufferentries(): ... undo()
复合形状
要使用由多个不同颜色多边形构成的复合海龟形状,你必须明确地使用辅助类 Shape,具体步骤如下:
-
创建一个空 Shape 对象,类型为 “compound”。
-
按照需要使用
addcomponent()方法向此对象添加多个部件。例如:
>>> 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") -
接下来将 Shape 对象添加到 Screen 对象的形状列表并使用它:
>>> register_shape("myshape", s) >>> shape("myshape")
注解
Shape 类在 register_shape() 方法的内部以多种方式使用。应用程序编写者 只有 在使用上述的复合形状时才需要处理 Shape 类。
TurtleScreen/Screen 方法及对应函数
本节中的大部分示例都使用 TurtleScreen 类的一个实例,命名为 screen。
窗口控制
-
turtle.``bgcolor(*args)参数args – 一个颜色字符串或三个取值范围 0…colormode 内的数值或一个取值范围相同的数值3元组设置或返回 TurtleScreen 的背景颜色。
>>> screen.bgcolor("orange") >>> screen.bgcolor() \'orange\' >>> screen.bgcolor("#800080") >>> screen.bgcolor() (128.0, 0.0, 128.0) -
turtle.``bgpic(picname=None)参数picname – 一个字符串, gif-文件名,
"nopic", 或None设置背景图片或返回当前背景图片名称。如果 picname 为一个文件名,则将相应图片设为背景。如果 picname 为"nopic",则删除当前背景图片。如果 picname 为None,则返回当前背景图片文件名。:>>>>>> 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()重置屏幕上的所有海龟为其初始状态。注解 此 TurtleScreen 方法作为全局函数时只有一个名字
resetscreen。全局函数reset所对应的是 Turtle 方法reset。 -
turtle.``screensize(canvwidth=None, canvheight=None, bg=None)参数canvwidth – 正整型数,以像素表示画布的新宽度值canvheight – 正整型数,以像素表示画面的新高度值bg – 颜色字符串或颜色元组,新的背景颜色如未指定任何参数,则返回当前的 (canvaswidth, canvasheight)。否则改变作为海龟绘图场所的画布大小。不改变绘图窗口。要观察画布的隐藏区域,可以使用滚动条。通过此方法可以令之前绘制于画布之外的图形变为可见。>>>
>>> screen.screensize() (400, 300) >>> screen.screensize(2000,1500) >>> screen.screensize() (2000, 1500)也可以用来寻找意外逃走的海龟