turtle --- 海龜繪圖?

源碼: Lib/turtle.py


概述?

海龜繪圖很適合用來引導(dǎo)孩子學(xué)習(xí)編程。 最初來自于 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 于 1967 年所創(chuàng)造的 Logo 編程語言。

請(qǐng)想象繪圖區(qū)有一只機(jī)器海龜,起始位置在 x-y 平面的 (0, 0) 點(diǎn)。先執(zhí)行 import turtle,再執(zhí)行 turtle.forward(15),它將(在屏幕上)朝所面對(duì)的 x 軸正方向前進(jìn) 15 像素,隨著它的移動(dòng)畫出一條線段。再執(zhí)行 turtle.right(25),它將原地右轉(zhuǎn) 25 度。

通過組合使用此類命令,可以輕松地繪制出精美的形狀和圖案。

turtle 模塊是基于 Python 標(biāo)準(zhǔn)發(fā)行版 2.5 以來的同名模塊重新編寫并進(jìn)行了功能擴(kuò)展。

新模塊盡量保持了原模塊的特點(diǎn),并且(幾乎)100%與其兼容。這就意味著初學(xué)編程者能夠以交互方式使用模塊的所有命令、類和方法——運(yùn)行 IDLE 時(shí)注意加 -n 參數(shù)。

turtle 模塊提供面向?qū)ο蠛兔嫦蜻^程兩種形式的海龜繪圖基本組件。由于它使用 tkinter 實(shí)現(xiàn)基本圖形界面,因此需要安裝了 Tk 支持的 Python 版本。

面向?qū)ο蟮慕涌谥饕褂谩?+2”個(gè)類:

  1. TurtleScreen 類定義圖形窗口作為繪圖海龜?shù)倪\(yùn)動(dòng)場(chǎng)。它的構(gòu)造器需要一個(gè) tkinter.CanvasScrolledCanvas 作為參數(shù)。應(yīng)在 turtle 作為某個(gè)程序的一部分的時(shí)候使用。

    Screen() 函數(shù)返回一個(gè) TurtleScreen 子類的單例對(duì)象。此函數(shù)應(yīng)在 turtle 作為獨(dú)立繪圖工具時(shí)使用。作為一個(gè)單例對(duì)象,其所屬的類是不可被繼承的。

    TurtleScreen/Screen 的所有方法還存在對(duì)應(yīng)的函數(shù),即作為面向過程的接口組成部分。

  2. RawTurtle (別名: RawPen) 類定義海龜對(duì)象在 TurtleScreen 上繪圖。它的構(gòu)造器需要一個(gè) Canvas, ScrolledCanvas 或 TurtleScreen 作為參數(shù),以指定 RawTurtle 對(duì)象在哪里繪圖。

    從 RawTurtle 派生出子類 Turtle (別名: Pen),該類對(duì)象在 Screen 實(shí)例上繪圖,如果實(shí)例不存在則會(huì)自動(dòng)創(chuàng)建。

    RawTurtle/Turtle 的所有方法也存在對(duì)應(yīng)的函數(shù),即作為面向過程的接口組成部分。

過程式接口提供與 ScreenTurtle 類的方法相對(duì)應(yīng)的函數(shù)。函數(shù)名與對(duì)應(yīng)的方法名相同。當(dāng) Screen 類的方法對(duì)應(yīng)函數(shù)被調(diào)用時(shí)會(huì)自動(dòng)創(chuàng)建一個(gè) Screen 對(duì)象。當(dāng) Turtle 類的方法對(duì)應(yīng)函數(shù)被調(diào)用時(shí)會(huì)自動(dòng)創(chuàng)建一個(gè) (匿名的) Turtle 對(duì)象。

如果屏幕上需要有多個(gè)海龜,就必須使用面向?qū)ο蟮慕涌凇?/p>

備注

以下文檔給出了函數(shù)的參數(shù)列表。對(duì)于方法來說當(dāng)然還有額外的第一個(gè)參數(shù) self,這里省略了。

可用的 Turtle 和 Screen 方法概覽?

Turtle 方法?

海龜動(dòng)作
移動(dòng)和繪制
forward() | fd() 前進(jìn)
right() | rt() 右轉(zhuǎn)
left() | lt() 左轉(zhuǎn)
goto() | setpos() | setposition() 前往/定位
setx() 設(shè)置x坐標(biāo)
sety() 設(shè)置y坐標(biāo)
setheading() | seth() 設(shè)置朝向
home() 返回原點(diǎn)
circle() 畫圓
dot() 畫點(diǎn)
stamp() 印章
clearstamp() 清除印章
clearstamps() 清除多個(gè)印章
undo() 撤消
speed() 速度
獲取海龜?shù)臓顟B(tài)
position() | pos() 位置
towards() 目標(biāo)方向
xcor() x坐標(biāo)
ycor() y坐標(biāo)
heading() 朝向
distance() 距離
設(shè)置與度量單位
degrees() 角度
radians() 弧度
畫筆控制
繪圖狀態(tài)
pendown() | pd() | down() 畫筆落下
penup() | pu() | up() 畫筆抬起
pensize() | width() 畫筆粗細(xì)
pen() 畫筆
isdown() 畫筆是否落下
顏色控制
color() 顏色
pencolor() 畫筆顏色
fillcolor() 填充顏色
填充
filling() 是否填充
begin_fill() 開始填充
end_fill() 結(jié)束填充
更多繪圖控制
reset() 重置
clear() 清空
write() 書寫
海龜狀態(tài)
可見性
showturtle() | st() 顯示海龜
hideturtle() | ht() 隱藏海龜
isvisible() 是否可見
外觀
shape() 形狀
resizemode() 大小調(diào)整模式
shapesize() | turtlesize() 形狀大小
shearfactor() 剪切因子
settiltangle() 設(shè)置傾角
tilt() 傾斜
get_shapepoly() 獲取形狀多邊形
使用事件
onclick() 當(dāng)鼠標(biāo)點(diǎn)擊
onrelease() 當(dāng)鼠標(biāo)釋放
ondrag() 當(dāng)鼠標(biāo)拖動(dòng)
特殊海龜方法
begin_poly() 開始記錄多邊形
end_poly() 結(jié)束記錄多邊形
get_poly() 獲取多邊形
clone() 克隆
getturtle() | getpen() 獲取海龜畫筆
getscreen() 獲取屏幕
setundobuffer() 設(shè)置撤消緩沖區(qū)
undobufferentries() 撤消緩沖區(qū)條目數(shù)

TurtleScreen/Screen 方法?

窗口控制
bgcolor() 背景顏色
bgpic() 背景圖片
screensize() 屏幕大小
setworldcoordinates() 設(shè)置世界坐標(biāo)系
動(dòng)畫控制
delay() 延遲
tracer() 追蹤
update() 更新
使用屏幕事件
listen() 監(jiān)聽
onkey() | onkeyrelease() 當(dāng)鍵盤按下并釋放
onkeypress() 當(dāng)鍵盤按下
onclick() | onscreenclick() 當(dāng)點(diǎn)擊屏幕
ontimer() 當(dāng)達(dá)到定時(shí)
mainloop() | done() 主循環(huán)
設(shè)置與特殊方法
colormode() 顏色模式
getcanvas() 獲取畫布
getshapes() 獲取形狀
turtles() 所有海龜
window_height() 窗口高度
window_width() 窗口寬度
輸入方法
textinput() 文本輸入
numinput() 數(shù)字輸入
Screen 專有方法
bye() 退出
exitonclick() 當(dāng)點(diǎn)擊時(shí)退出
setup() 設(shè)置
title() 標(biāo)題

RawTurtle/Turtle 方法和對(duì)應(yīng)函數(shù)?

本節(jié)中的大部分示例都使用 Turtle 類的一個(gè)實(shí)例,命名為 turtle。

海龜動(dòng)作?

turtle.forward(distance)?
turtle.fd(distance)?
參數(shù)

distance -- 一個(gè)數(shù)值 (整型或浮點(diǎn)型)

海龜前進(jìn) distance 指定的距離,方向?yàn)楹}數(shù)某颉?/p>

>>>
>>> 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)?
參數(shù)

distance -- 一個(gè)數(shù)值

海龜后退 distance 指定的距離,方向與海龜?shù)某蛳喾?。不改變海龜?shù)某颉?/p>

>>>
>>> turtle.position()
(0.00,0.00)
>>> turtle.backward(30)
>>> turtle.position()
(-30.00,0.00)
turtle.right(angle)?
turtle.rt(angle)?
參數(shù)

angle -- 一個(gè)數(shù)值 (整型或浮點(diǎn)型)

海龜右轉(zhuǎn) angle 個(gè)單位。(單位默認(rèn)為角度,但可通過 degrees()radians() 函數(shù)改變?cè)O(shè)置。) 角度的正負(fù)由海龜模式確定,參見 mode()。

>>>
>>> turtle.heading()
22.0
>>> turtle.right(45)
>>> turtle.heading()
337.0
turtle.left(angle)?
turtle.lt(angle)?
參數(shù)

angle -- 一個(gè)數(shù)值 (整型或浮點(diǎn)型)

海龜左轉(zhuǎn) angle 個(gè)單位。(單位默認(rèn)為角度,但可通過 degrees()radians() 函數(shù)改變?cè)O(shè)置。) 角度的正負(fù)由海龜模式確定,參見 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)?
參數(shù)
  • x -- 一個(gè)數(shù)值或數(shù)值對(duì)/向量

  • y -- 一個(gè)數(shù)值或 None

如果 yNone,x 應(yīng)為一個(gè)表示坐標(biāo)的數(shù)值對(duì)或 Vec2D 類對(duì)象 (例如 pos() 返回的對(duì)象).

海龜移動(dòng)到一個(gè)絕對(duì)坐標(biāo)。如果畫筆已落下將會(huì)畫線。不改變海龜?shù)某颉?/p>

 >>> 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)?
參數(shù)

x -- 一個(gè)數(shù)值 (整型或浮點(diǎn)型)

設(shè)置海龜?shù)臋M坐標(biāo)為 x,縱坐標(biāo)保持不變。

>>>
>>> turtle.position()
(0.00,240.00)
>>> turtle.setx(10)
>>> turtle.position()
(10.00,240.00)
turtle.sety(y)?
參數(shù)

y -- 一個(gè)數(shù)值 (整型或浮點(diǎn)型)

設(shè)置海龜?shù)目v坐標(biāo)為 y,橫坐標(biāo)保持不變。

>>>
>>> turtle.position()
(0.00,40.00)
>>> turtle.sety(-10)
>>> turtle.position()
(0.00,-10.00)
turtle.setheading(to_angle)?
turtle.seth(to_angle)?
參數(shù)

to_angle -- 一個(gè)數(shù)值 (整型或浮點(diǎn)型)

設(shè)置海龜?shù)某驗(yàn)?to_angle。以下是以角度表示的幾個(gè)常用方向:

標(biāo)準(zhǔn)模式

logo 模式

0 - 東

0 - 北

90 - 北

90 - 東

180 - 西

180 - 南

270 - 南

270 - 西

>>>
>>> turtle.setheading(90)
>>> turtle.heading()
90.0
turtle.home()?

海龜移至初始坐標(biāo) (0,0),并設(shè)置朝向?yàn)槌跏挤较?(由海龜模式確定,參見 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)?
參數(shù)
  • radius -- 一個(gè)數(shù)值

  • extent -- 一個(gè)數(shù)值 (或 None)

  • steps -- 一個(gè)整型數(shù) (或 None)

繪制一個(gè) radius 指定半徑的圓。圓心在海龜左邊 radius 個(gè)單位;extent 為一個(gè)夾角,用來決定繪制圓的一部分。如未指定 extent*則繪制整個(gè)圓。如果 *extent 不是完整圓周,則以當(dāng)前畫筆位置為一個(gè)端點(diǎn)繪制圓弧。如果 radius 為正值則朝逆時(shí)針方向繪制圓弧,否則朝順時(shí)針方向。最終海龜?shù)某驎?huì)依據(jù) extent 的值而改變。

圓實(shí)際是以其內(nèi)切正多邊形來近似表示的,其邊的數(shù)量由 steps 指定。如果未指定邊數(shù)則會(huì)自動(dòng)確定。此方法也可用來繪制正多邊形。

>>>
>>> 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)?
參數(shù)
  • size -- 一個(gè)整型數(shù) >= 1 (如果指定)

  • color -- 一個(gè)顏色字符串或顏色數(shù)值元組

繪制一個(gè)直徑為 size,顏色為 color 的圓點(diǎn)。如果 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()?

在海龜當(dāng)前位置印制一個(gè)海龜形狀。返回該印章的 stamp_id,印章可以通過調(diào)用 clearstamp(stamp_id) 來刪除。

>>>
>>> turtle.color("blue")
>>> turtle.stamp()
11
>>> turtle.fd(50)
turtle.clearstamp(stampid)?
參數(shù)

stampid -- 一個(gè)整型數(shù),必須是之前 stamp() 調(diào)用的返回值

刪除 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)?
參數(shù)

n -- 一個(gè)整型數(shù) (或 None)

刪除全部或前/后 n 個(gè)海龜印章。如果 nNone 則刪除全部印章,如果 n > 0 則刪除前 n 個(gè)印章,否則如果 n < 0 則刪除后 n 個(gè)印章。

>>>
>>> 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()?

撤消 (或連續(xù)撤消) 最近的一個(gè) (或多個(gè)) 海龜動(dòng)作??沙废拇螖?shù)由撤消緩沖區(qū)的大小決定。

>>>
>>> for i in range(4):
...     turtle.fd(50); turtle.lt(80)
...
>>> for i in range(8):
...     turtle.undo()
turtle.speed(speed=None)?
參數(shù)

speed -- 一個(gè) 0..10 范圍內(nèi)的整型數(shù)或速度字符串 (見下)

設(shè)置海龜移動(dòng)的速度為 0..10 表示的整型數(shù)值。如未指定參數(shù)則返回當(dāng)前速度。

如果輸入數(shù)值大于 10 或小于 0.5 則速度設(shè)為 0。速度字符串與速度值的對(duì)應(yīng)關(guān)系如下:

  • "fastest": 0 最快

  • "fast": 10 快

  • "normal": 6 正常

  • "slow": 3 慢

  • "slowest": 1 最慢

速度值從 1 到 10,畫線和海龜轉(zhuǎn)向的動(dòng)畫效果逐級(jí)加快。

注意: speed = 0 表示 沒有 動(dòng)畫效果。forward/back 將使海龜向前/向后跳躍,同樣的 left/right 將使海龜立即改變朝向。

>>>
>>> turtle.speed()
3
>>> turtle.speed('normal')
>>> turtle.speed()
6
>>> turtle.speed(9)
>>> turtle.speed()
9

獲取海龜?shù)臓顟B(tài)?

turtle.position()?
turtle.pos()?

返回海龜當(dāng)前的坐標(biāo) (x,y) (為 Vec2D 矢量類對(duì)象)。

>>>
>>> turtle.pos()
(440.00,-0.00)
turtle.towards(x, y=None)?
參數(shù)
  • x -- 一個(gè)數(shù)值或數(shù)值對(duì)/矢量,或一個(gè)海龜實(shí)例

  • y -- 一個(gè)數(shù)值——如果 x 是一個(gè)數(shù)值,否則為 None

返回從海龜位置到由 (x,y)、矢量或另一海龜所確定位置的連線的夾角。 此數(shù)值依賴于海龜?shù)某跏汲?,這又取決于 "standard"/"world" 或 "logo" 模式設(shè)置。

>>>
>>> turtle.goto(10, 10)
>>> turtle.towards(0,0)
225.0
turtle.xcor()?

返回海龜?shù)?x 坐標(biāo)。

>>>
>>> turtle.home()
>>> turtle.left(50)
>>> turtle.forward(100)
>>> turtle.pos()
(64.28,76.60)
>>> print(round(turtle.xcor(), 5))
64.27876
turtle.ycor()?

返回海龜?shù)?y 坐標(biāo)。

>>>
>>> turtle.home()
>>> turtle.left(60)
>>> turtle.forward(100)
>>> print(turtle.pos())
(50.00,86.60)
>>> print(round(turtle.ycor(), 5))
86.60254
turtle.heading()?

返回海龜當(dāng)前的朝向 (數(shù)值依賴于海龜模式參見 mode())。

>>>
>>> turtle.home()
>>> turtle.left(67)
>>> turtle.heading()
67.0
turtle.distance(x, y=None)?
參數(shù)
  • x -- 一個(gè)數(shù)值或數(shù)值對(duì)/矢量,或一個(gè)海龜實(shí)例

  • y -- 一個(gè)數(shù)值——如果 x 是一個(gè)數(shù)值,否則為 None

返回從海龜位置到由 (x,y),適量或另一海龜對(duì)應(yīng)位置的單位距離。

>>>
>>> turtle.home()
>>> turtle.distance(30,40)
50.0
>>> turtle.distance((30,40))
50.0
>>> joe = Turtle()
>>> joe.forward(77)
>>> turtle.distance(joe)
77.0

度量單位設(shè)置?

turtle.degrees(fullcircle=360.0)?
參數(shù)

fullcircle -- 一個(gè)數(shù)值

設(shè)置角度的度量單位,即設(shè)置一個(gè)圓周為多少 "度"。默認(rèn)值為 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()?

設(shè)置角度的度量單位為弧度。其值等于 degrees(2*math.pi)。

>>>
>>> turtle.home()
>>> turtle.left(90)
>>> turtle.heading()
90.0
>>> turtle.radians()
>>> turtle.heading()
1.5707963267948966

畫筆控制?

繪圖狀態(tài)?

turtle.pendown()?
turtle.pd()?
turtle.down()?

畫筆落下 -- 移動(dòng)時(shí)將畫線。

turtle.penup()?
turtle.pu()?
turtle.up()?

畫筆抬起 -- 移動(dòng)時(shí)不畫線。

turtle.pensize(width=None)?
turtle.width(width=None)?
參數(shù)

width -- 一個(gè)正數(shù)值

設(shè)置線條的粗細(xì)為 width 或返回該值。如果 resizemode 設(shè)為 "auto" 并且 turtleshape 為多邊形,該多邊形也以同樣組細(xì)的線條繪制。如未指定參數(shù),則返回當(dāng)前的 pensize。

>>>
>>> turtle.pensize()
1
>>> turtle.pensize(10)   # from here on lines of width 10 are drawn
turtle.pen(pen=None, **pendict)?
參數(shù)
  • pen -- 一個(gè)包含部分或全部下列鍵的字典

  • pendict -- 一個(gè)或多個(gè)以下列鍵為關(guān)鍵字的關(guān)鍵字參數(shù)

返回或設(shè)置畫筆的屬性,以一個(gè)包含以下鍵值對(duì)的 "畫筆字典" 表示:

  • "shown": True/False

  • "pendown": True/False

  • "pencolor": 顏色字符串或顏色元組

  • "fillcolor": 顏色字符串或顏色元組

  • "pensize": 正數(shù)值

  • "speed": 0..10 范圍內(nèi)的數(shù)值

  • "resizemode": "auto" 或 "user" 或 "noresize"

  • "stretchfactor": (正數(shù)值, 正數(shù)值)

  • "outline": 正數(shù)值

  • "tilt": 數(shù)值

此字典可作為后續(xù)調(diào)用 pen() 時(shí)的參數(shù),以恢復(fù)之前的畫筆狀態(tài)。另外還可將這些屬性作為關(guān)鍵詞參數(shù)提交。使用此方式可以用一條語句設(shè)置畫筆的多個(gè)屬性。

>>>
>>> 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)?

返回或設(shè)置畫筆顏色。

允許以下四種輸入格式:

pencolor()

返回以顏色描述字符串或元組 (見示例) 表示的當(dāng)前畫筆顏色??捎米髌渌?color/pencolor/fillcolor 調(diào)用的輸入。

pencolor(colorstring)

設(shè)置畫筆顏色為 colorstring 指定的 Tk 顏色描述字符串,例如 "red"、"yellow""#33cc8c"。

pencolor((r, g, b))

設(shè)置畫筆顏色為以 r, g, b 元組表示的 RGB 顏色。r, g, b 的取值范圍應(yīng)為 0..colormode,colormode 的值為 1.0 或 255 (參見 colormode())。

pencolor(r, g, b)

設(shè)置畫筆顏色為以 r, g, b 表示的 RGB 顏色。r, g, b 的取值范圍應(yīng)為 0..colormode。

如果 turtleshape 為多邊形,該多邊形輪廓也以新設(shè)置的畫筆顏色繪制。

 >>> 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)?

返回或設(shè)置填充顏色。

允許以下四種輸入格式:

fillcolor()

返回以顏色描述字符串或元組 (見示例) 表示的當(dāng)前填充顏色。可用作其他 color/pencolor/fillcolor 調(diào)用的輸入。

fillcolor(colorstring)

設(shè)置填充顏色為 colorstring 指定的 Tk 顏色描述字符串,例如 "red""yellow""#33cc8c"。

fillcolor((r, g, b))

設(shè)置填充顏色為以 r, g, b 元組表示的 RGB 顏色。r, g, b 的取值范圍應(yīng)為 0..colormode,colormode 的值為 1.0 或 255 (參見 colormode())。

fillcolor(r, g, b)

設(shè)置填充顏色為 r, g, b 表示的 RGB 顏色。r, g, b 的取值范圍應(yīng)為 0..colormode。

如果 turtleshape 為多邊形,該多邊形內(nèi)部也以新設(shè)置的填充顏色填充。

 >>> 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)?

返回或設(shè)置畫筆顏色和填充顏色。

允許多種輸入格式。使用如下 0 至 3 個(gè)參數(shù):

color()

返回以一對(duì)顏色描述字符串或元組表示的當(dāng)前畫筆顏色和填充顏色,兩者可分別由 pencolor()fillcolor() 返回。

color(colorstring), color((r,g,b)), color(r,g,b)

輸入格式與 pencolor() 相同,同時(shí)設(shè)置填充顏色和畫筆顏色為指定的值。

color(colorstring1, colorstring2), color((r1,g1,b1), (r2,g2,b2))

相當(dāng)于 pencolor(colorstring1)fillcolor(colorstring2),使用其他輸入格式的方法也與之類似。

如果 turtleshape 為多邊形,該多邊形輪廓與填充也使用新設(shè)置的顏色。

 >>> 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()?

返回填充狀態(tài) (填充為 True,否則為 False)。

 >>> turtle.begin_fill()
 >>> if turtle.filling():
 ...    turtle.pensize(5)
 ... else:
 ...    turtle.pensize(3)
turtle.begin_fill()?

在繪制要填充的形狀之前調(diào)用。

turtle.end_fill()?

填充上次調(diào)用 begin_fill() 之后繪制的形狀。

自相交多邊形或多個(gè)形狀間的重疊區(qū)域是否填充取決于操作系統(tǒng)的圖形引擎、重疊的類型以及重疊的層數(shù)。 例如上面的 Turtle 多芒星可能會(huì)全部填充為黃色,也可能會(huì)有一些白色區(qū)域。

>>>
>>> turtle.color("black", "red")
>>> turtle.begin_fill()
>>> turtle.circle(80)
>>> turtle.end_fill()

更多繪圖控制?

turtle.reset()?

從屏幕中刪除海龜?shù)睦L圖,海龜回到原點(diǎn)并設(shè)置所有變量為默認(rèn)值。

>>>
>>> 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()?

從屏幕中刪除指定海龜?shù)睦L圖。不移動(dòng)海龜。海龜?shù)臓顟B(tài)和位置以及其他海龜?shù)睦L圖不受影響。

turtle.write(arg, move=False, align='left', font=('Arial', 8, 'normal'))?
參數(shù)
  • arg -- 要書寫到 TurtleScreen 的對(duì)象

  • move -- True/False

  • align -- 字符串 "left", "center" 或 "right"

  • font -- 一個(gè)三元組 (fontname, fontsize, fonttype)

基于 align ("left", "center" 或 "right") 并使用給定的字體將文本 —— arg 的字符串表示形式 —— 寫到當(dāng)前海龜位置。 如果 move 為真值,畫筆會(huì)移至文本的右下角。 默認(rèn)情況下 moveFalse

>>>
>>> turtle.write("Home = ", True, align="center")
>>> turtle.write((0,0), True)

海龜狀態(tài)?

可見性?

turtle.hideturtle()?
turtle.ht()?

使海龜不可見。當(dāng)你繪制復(fù)雜圖形時(shí)這是個(gè)好主意,因?yàn)殡[藏海龜可顯著加快繪制速度。

>>>
>>> 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)?
參數(shù)

name -- 一個(gè)有效的形狀名字符串

設(shè)置海龜形狀為 name 指定的形狀名,如未指定形狀名則返回當(dāng)前的形狀名。name 指定的形狀名應(yīng)存在于 TurtleScreen 的 shape 字典中。多邊形的形狀初始時(shí)有以下幾種: "arrow", "turtle", "circle", "square", "triangle", "classic"。要了解如何處理形狀請(qǐng)參看 Screen 方法 register_shape()

>>>
>>> turtle.shape()
'classic'
>>> turtle.shape("turtle")
>>> turtle.shape()
'turtle'
turtle.resizemode(rmode=None)?
參數(shù)

rmode -- 字符串 "auto", "user", "noresize" 其中之一

設(shè)置大小調(diào)整模式為以下值之一: "auto", "user", "noresize"。如未指定 rmode 則返回當(dāng)前的大小調(diào)整模式。不同的大小調(diào)整模式的效果如下:

  • "auto": 根據(jù)畫筆粗細(xì)值調(diào)整海龜?shù)耐庥^。

  • "user": 根據(jù)拉伸因子和輪廓寬度 (outline) 值調(diào)整海龜?shù)耐庥^,兩者是由 shapesize() 設(shè)置的。

  • "noresize": 不調(diào)整海龜?shù)耐庥^大小。

resizemode("user") 會(huì)由 shapesize() 帶參數(shù)使用時(shí)被調(diào)用。

>>>
>>> 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)?
參數(shù)
  • stretch_wid -- 正數(shù)值

  • stretch_len -- 正數(shù)值

  • outline -- 正數(shù)值

返回或設(shè)置畫筆的屬性 x/y-拉伸因子和/或輪廓。設(shè)置大小調(diào)整模式為 "user"。當(dāng)且僅當(dāng)大小調(diào)整模式設(shè)為 "user" 時(shí)海龜會(huì)基于其拉伸因子調(diào)整外觀: stretch_wid 為垂直于其朝向的寬度拉伸因子,stretch_len 為平等于其朝向的長(zhǎng)度拉伸因子,決定形狀輪廓線的粗細(xì)。

>>>
>>> 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)?
參數(shù)

shear -- 數(shù)值 (可選)

設(shè)置或返回當(dāng)前的剪切因子。根據(jù) share 指定的剪切因子即剪切角度的切線來剪切海龜形狀。 改變海龜?shù)某?(移動(dòng)方向)。如未指定 shear 參數(shù): 返回當(dāng)前的剪切因子即剪切角度的切線,與海龜朝向平行的線條將被剪切。

 >>> turtle.shape("circle")
 >>> turtle.shapesize(5,2)
 >>> turtle.shearfactor(0.5)
 >>> turtle.shearfactor()
 0.5
turtle.tilt(angle)?
參數(shù)

angle -- 一個(gè)數(shù)值

海龜形狀自其當(dāng)前的傾角轉(zhuǎn)動(dòng) angle 指定的角度,但 改變海龜?shù)某?(移動(dòng)方向)。

>>>
>>> turtle.reset()
>>> turtle.shape("circle")
>>> turtle.shapesize(5,2)
>>> turtle.tilt(30)
>>> turtle.fd(50)
>>> turtle.tilt(30)
>>> turtle.fd(50)
turtle.settiltangle(angle)?
參數(shù)

angle -- 一個(gè)數(shù)值

旋轉(zhuǎn)海龜形狀使其指向 angle 指定的方向,忽略其當(dāng)前的傾角, 改變海龜?shù)某?(移動(dòng)方向)。

>>>
>>> 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)?
參數(shù)

angle -- 一個(gè)數(shù)值 (可選)

設(shè)置或返回當(dāng)前的傾角。如果指定 angle 則旋轉(zhuǎn)海龜形狀使其指向 angle 指定的方向,忽略其當(dāng)前的傾角。 改變海龜?shù)某?(移動(dòng)方向)。如果未指定 angle: 返回當(dāng)前的傾角,即海龜形狀的方向和海龜朝向 (移動(dòng)方向) 之間的夾角。

>>>
>>> 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)?
參數(shù)
  • t11 -- 一個(gè)數(shù)值 (可選)

  • t12 -- 一個(gè)數(shù)值 (可選)

  • t21 -- 一個(gè)數(shù)值 (可選)

  • t12 -- 一個(gè)數(shù)值 (可選)

設(shè)置或返回海龜形狀的當(dāng)前變形矩陣。

如未指定任何矩陣元素,則返回以 4 元素元組表示的變形矩陣。 否則就根據(jù)設(shè)置指定元素的矩陣來改變海龜形狀,矩陣第一排的值為 t11, t12 而第二排的值為 t21, t22。 行列式 t11 * t22 - t12 * t21 必須不為零,否則會(huì)引發(fā)錯(cuò)誤。 根據(jù)指定矩陣修改拉伸因子 stretchfactor, 剪切因子 shearfactor 和傾角 tiltangle。

>>>
>>> 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()?

返回以坐標(biāo)值對(duì)元組表示的當(dāng)前形狀多邊形。這可以用于定義一個(gè)新形狀或一個(gè)復(fù)合形狀的多個(gè)組成部分。

>>>
>>> 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)
參數(shù)
  • fun -- 一個(gè)函數(shù),調(diào)用時(shí)將傳入兩個(gè)參數(shù)表示在畫布上點(diǎn)擊的坐標(biāo)。

  • btn -- 鼠標(biāo)按鈕編號(hào),默認(rèn)值為 1 (鼠標(biāo)左鍵)

  • add -- TrueFalse -- 如為 True 則將添加一個(gè)新綁定,否則將取代先前的綁定

fun 指定的函數(shù)綁定到鼠標(biāo)點(diǎn)擊此海龜事件。如果 fun 值為 None,則移除現(xiàn)有的綁定。以下為使用匿名海龜即過程式的示例:

>>>
>>> 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)?
參數(shù)
  • fun -- 一個(gè)函數(shù),調(diào)用時(shí)將傳入兩個(gè)參數(shù)表示在畫布上點(diǎn)擊的坐標(biāo)。

  • btn -- 鼠標(biāo)按鈕編號(hào),默認(rèn)值為 1 (鼠標(biāo)左鍵)

  • add -- TrueFalse -- 如為 True 則將添加一個(gè)新綁定,否則將取代先前的綁定

fun 指定的函數(shù)綁定到在此海龜上釋放鼠標(biāo)按鍵事件。如果 fun 值為 None,則移除現(xiàn)有的綁定。

>>>
>>> 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)?
參數(shù)
  • fun -- 一個(gè)函數(shù),調(diào)用時(shí)將傳入兩個(gè)參數(shù)表示在畫布上點(diǎn)擊的坐標(biāo)。

  • btn -- 鼠標(biāo)按鈕編號(hào),默認(rèn)值為 1 (鼠標(biāo)左鍵)

  • add -- TrueFalse -- 如為 True 則將添加一個(gè)新綁定,否則將取代先前的綁定

fun 指定的函數(shù)綁定到在此海龜上移動(dòng)鼠標(biāo)事件。如果 fun 值為 None,則移除現(xiàn)有的綁定。

注: 在海龜上移動(dòng)鼠標(biāo)事件之前應(yīng)先發(fā)生在此海龜上點(diǎn)擊鼠標(biāo)事件。

>>>
>>> turtle.ondrag(turtle.goto)

在此之后點(diǎn)擊并拖動(dòng)海龜可在屏幕上手繪線條 (如果畫筆為落下)。

特殊海龜方法?

turtle.begin_poly()?

開始記錄多邊形的頂點(diǎn)。當(dāng)前海龜位置為多邊形的第一個(gè)頂點(diǎn)。

turtle.end_poly()?

停止記錄多邊形的頂點(diǎn)。當(dāng)前海龜位置為多邊形的最后一個(gè)頂點(diǎn)。它將連線到第一個(gè)頂點(diǎn)。

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()?

創(chuàng)建并返回海龜?shù)目寺◇w,具有相同的位置、朝向和海龜屬性。

>>>
>>> mick = Turtle()
>>> joe = mick.clone()
turtle.getturtle()?
turtle.getpen()?

返回海龜對(duì)象自身。唯一合理的用法: 作為一個(gè)函數(shù)來返回 "匿名海龜":

>>>
>>> pet = getturtle()
>>> pet.fd(50)
>>> pet
<turtle.Turtle object at 0x...>
turtle.getscreen()?

返回作為海龜繪圖場(chǎng)所的 TurtleScreen 類對(duì)象。該對(duì)象將可調(diào)用 TurtleScreen 方法。

>>>
>>> ts = turtle.getscreen()
>>> ts
<turtle._Screen object at 0x...>
>>> ts.bgcolor("pink")
turtle.setundobuffer(size)?
參數(shù)

size -- 一個(gè)整型數(shù)值或 None

設(shè)置或禁用撤銷緩沖區(qū)。 如果 size 為整數(shù),則開辟一個(gè)給定大小的空撤銷緩沖區(qū)。 size 給出了可以通過 undo() 方法/函數(shù)撤銷海龜動(dòng)作的最大次數(shù)。 如果 sizeNone,則禁用撤銷緩沖區(qū)。

>>>
>>> turtle.setundobuffer(42)
turtle.undobufferentries()?

返回撤銷緩沖區(qū)里的條目數(shù)。

>>>
>>> while undobufferentries():
...     undo()

復(fù)合形狀?

要使用由多個(gè)不同顏色多邊形構(gòu)成的復(fù)合海龜形狀,你必須明確地使用輔助類 Shape,具體步驟如下:

  1. 創(chuàng)建一個(gè)空 Shape 對(duì)象,類型為 "compound"。

  2. 按照需要使用 addcomponent() 方法向此對(duì)象添加多個(gè)部件。

    例如:

    >>>
    >>> 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")
    
  3. 接下來將 Shape 對(duì)象添加到 Screen 對(duì)象的形狀列表并使用它:

    >>>
    >>> register_shape("myshape", s)
    >>> shape("myshape")
    

備注

Shape 類在 register_shape() 方法的內(nèi)部以多種方式使用。應(yīng)用程序編寫者 只有 在使用上述的復(fù)合形狀時(shí)才需要處理 Shape 類。

TurtleScreen/Screen 方法及對(duì)應(yīng)函數(shù)?

本節(jié)中的大部分示例都使用 TurtleScreen 類的一個(gè)實(shí)例,命名為 screen。

窗口控制?

turtle.bgcolor(*args)?
參數(shù)

args -- 一個(gè)顏色字符串或三個(gè)取值范圍 0..colormode 內(nèi)的數(shù)值或一個(gè)取值范圍相同的數(shù)值3元組

設(shè)置或返回 TurtleScreen 的背景顏色。

>>>
>>> screen.bgcolor("orange")
>>> screen.bgcolor()
'orange'
>>> screen.bgcolor("#800080")
>>> screen.bgcolor()
(128.0, 0.0, 128.0)
turtle.bgpic(picname=None)?
參數(shù)

picname -- 一個(gè)字符串, gif-文件名, "nopic", 或 None

設(shè)置背景圖片或返回當(dāng)前背景圖片名稱。如果 picname 為一個(gè)文件名,則將相應(yīng)圖片設(shè)為背景。如果 picname"nopic",則刪除當(dāng)前背景圖片。如果 picnameNone,則返回當(dāng)前背景圖片文件名。:

>>>
>>> screen.bgpic()
'nopic'
>>> screen.bgpic("landscape.gif")
>>> screen.bgpic()
"landscape.gif"
turtle.clear()

備注

此 TurtleScreen 方法作為全局函數(shù)時(shí)只有一個(gè)名字 clearscreen。全局函數(shù) clear 所對(duì)應(yīng)的是 Turtle 方法 clear。

turtle.clearscreen()?

從中刪除所有海龜?shù)娜坷L圖。將已清空的 TurtleScreen 重置為初始狀態(tài): 白色背景,無背景片,無事件綁定并啟用追蹤。

turtle.reset()

備注

此 TurtleScreen 方法作為全局函數(shù)時(shí)只有一個(gè)名字 resetscreen。全局函數(shù) reset 所對(duì)應(yīng)的是 Turtle 方法 reset。

turtle.resetscreen()?

重置屏幕上的所有海龜為其初始狀態(tài)。

turtle.screensize(canvwidth=None, canvheight=None, bg=None)?
參數(shù)
  • canvwidth -- 正整型數(shù),以像素表示畫布的新寬度值

  • canvheight -- 正整型數(shù),以像素表示畫面的新高度值

  • bg -- 顏色字符串或顏色元組,新的背景顏色

如未指定任何參數(shù),則返回當(dāng)前的 (canvaswidth, canvasheight)。否則改變作為海龜繪圖場(chǎng)所的畫布大小。不改變繪圖窗口。要觀察畫布的隱藏區(qū)域,可以使用滾動(dòng)條。通過此方法可以令之前繪制于畫布之外的圖形變?yōu)榭梢姟?/p>

>>>
>>> screen.screensize()
(400, 300)
>>> screen.screensize(2000,1500)
>>> screen.screensize()
(2000, 1500)

也可以用來尋找意外逃走的海龜 ;-)

turtle.setworldcoordinates(llx, lly, urx, ury)?
參數(shù)
  • llx -- 一個(gè)數(shù)值, 畫布左下角的 x-坐標(biāo)

  • lly -- 一個(gè)數(shù)值, 畫布左下角的 y-坐標(biāo)

  • urx -- 一個(gè)數(shù)值, 畫面右上角的 x-坐標(biāo)

  • ury -- 一個(gè)數(shù)值, 畫布右上角的 y-坐標(biāo)

設(shè)置用戶自定義坐標(biāo)系并在必要時(shí)切換模式為 "world"。這會(huì)執(zhí)行一次 screen.reset()。如果 "world" 模式已激活,則所有圖形將根據(jù)新的坐標(biāo)系重繪。

注意: 在用戶自定義坐標(biāo)系中,角度可能顯得扭曲。

>>>
>>> screen.reset()
>>> screen.setworldcoordinates(-50,-7.5,50,7.5)
>>> for _ in range(72):
...     left(10)
...
>>> for _ in range(8):
...     left(45); fd(2)   # a regular octagon

動(dòng)畫控制?

turtle.delay(delay=None)?
參數(shù)

delay -- 正整型數(shù)

設(shè)置或返回以毫秒數(shù)表示的延遲值 delay。(這約等于連續(xù)兩次畫布刷新的間隔時(shí)間。) 繪圖延遲越長(zhǎng),動(dòng)畫速度越慢。

可選參數(shù):

>>>
>>> screen.delay()
10
>>> screen.delay(5)
>>> screen.delay()
5
turtle.tracer(n=None, delay=None)?
參數(shù)
  • n -- 非負(fù)整型數(shù)

  • delay -- 非負(fù)整型數(shù)

啟用/禁用海龜動(dòng)畫并設(shè)置刷新圖形的延遲時(shí)間。如果指定 n 值,則只有每第 n 次屏幕刷新會(huì)實(shí)際執(zhí)行。(可被用來加速?gòu)?fù)雜圖形的繪制。) 如果調(diào)用時(shí)不帶參數(shù),則返回當(dāng)前保存的 n 值。第二個(gè)參數(shù)設(shè)置延遲值 (參見 delay())。

>>>
>>> screen.tracer(8, 25)
>>> dist = 2
>>> for i in range(200):
...     fd(dist)
...     rt(90)
...     dist += 2
turtle.update()?

執(zhí)行一次 TurtleScreen 刷新。在禁用追蹤時(shí)使用。

另參見 RawTurtle/Turtle 方法 speed()。

使用屏幕事件?

turtle.listen(xdummy=None, ydummy=None)?

設(shè)置焦點(diǎn)到 TurtleScreen (以便接收按鍵事件)。使用兩個(gè) Dummy 參數(shù)以便能夠傳遞 listen() 給 onclick 方法。

turtle.onkey(fun, key)?
turtle.onkeyrelease(fun, key)?
參數(shù)
  • fun -- 一個(gè)無參數(shù)的函數(shù)或 None

  • key -- 一個(gè)字符串: 鍵 (例如 "a") 或鍵標(biāo) (例如 "space")

綁定 fun 指定的函數(shù)到按鍵釋放事件。如果 fun 值為 None,則移除事件綁定。注: 為了能夠注冊(cè)按鍵事件,TurtleScreen 必須得到焦點(diǎn)。(參見 method listen() 方法。)

>>>
>>> def f():
...     fd(50)
...     lt(60)
...
>>> screen.onkey(f, "Up")
>>> screen.listen()
turtle.onkeypress(fun, key=None)?
參數(shù)
  • fun -- 一個(gè)無參數(shù)的函數(shù)或 None

  • key -- 一個(gè)字符串: 鍵 (例如 "a") 或鍵標(biāo) (例如 "space")

綁定 fun 指定的函數(shù)到指定鍵的按下事件。如未指定鍵則綁定到任意鍵的按下事件。注: 為了能夠注冊(cè)按鍵事件,必須得到焦點(diǎn)。(參見 listen() 方法。)

>>>
>>> def f():
...     fd(50)
...
>>> screen.onkey(f, "Up")
>>> screen.listen()
turtle.onclick(fun, btn=1, add=None)?
turtle.onscreenclick(fun, btn=1, add=None)?
參數(shù)
  • fun -- 一個(gè)函數(shù),調(diào)用時(shí)將傳入兩個(gè)參數(shù)表示在畫布上點(diǎn)擊的坐標(biāo)。

  • btn -- 鼠標(biāo)按鈕編號(hào),默認(rèn)值為 1 (鼠標(biāo)左鍵)

  • add -- TrueFalse -- 如為 True 則將添加一個(gè)新綁定,否則將取代先前的綁定

綁定 fun 指定的函數(shù)到鼠標(biāo)點(diǎn)擊屏幕事件。如果 fun 值為 None,則移除現(xiàn)有的綁定。

以下示例使用一個(gè) TurtleScreen 實(shí)例 screen 和一個(gè) Turtle 實(shí)例 turtle:

>>>
>>> screen.onclick(turtle.goto) # Subsequently clicking into the TurtleScreen will
>>>                             # make the turtle move to the clicked point.
>>> screen.onclick(None)        # remove event binding again

備注

此 TurtleScreen 方法作為全局函數(shù)時(shí)只有一個(gè)名字 onscreenclick。全局函數(shù) onclick 所對(duì)應(yīng)的是 Turtle 方法 onclick

turtle.ontimer(fun, t=0)?
參數(shù)
  • fun -- 一個(gè)無參數(shù)的函數(shù)

  • t -- 一個(gè)數(shù)值 >= 0

安裝一個(gè)計(jì)時(shí)器,在 t 毫秒后調(diào)用 fun 函數(shù)。

>>>
>>> running = True
>>> def f():
...     if running:
...         fd(50)
...         lt(60)
...         screen.ontimer(f, 250)
>>> f()   ### makes the turtle march around
>>> running = False
turtle.mainloop()?
turtle.done()?

開始事件循環(huán) - 調(diào)用 Tkinter 的 mainloop 函數(shù)。必須作為一個(gè)海龜繪圖程序的結(jié)束語句。如果一個(gè)腳本是在以 -n 模式 (無子進(jìn)程) 啟動(dòng)的 IDLE 中運(yùn)行時(shí) 不可 使用 - 用于實(shí)現(xiàn)海龜繪圖的交互功能。:

>>>
>>> screen.mainloop()

輸入方法?

turtle.textinput(title, prompt)?
參數(shù)
  • title -- string

  • prompt -- string

彈出一個(gè)對(duì)話框窗口用來輸入一個(gè)字符串。形參 title 為對(duì)話框窗口的標(biāo)題,prompt 為一條文本,通常用來提示要輸入什么信息。返回輸入的字符串。如果對(duì)話框被取消則返回 None。:

>>>
>>> screen.textinput("NIM", "Name of first player:")
turtle.numinput(title, prompt, default=None, minval=None, maxval=None)?
參數(shù)
  • title -- string

  • prompt -- string

  • default -- 數(shù)值 (可選)

  • minval -- 數(shù)值 (可選)

  • maxval -- 數(shù)值 (可選)

Pop up a dialog window for input of a number. title is the title of the dialog window, prompt is a text mostly describing what numerical information to input. default: default value, minval: minimum value for input, maxval: maximum value for input. The number input must be in the range minval .. maxval if these are given. If not, a hint is issued and the dialog remains open for correction. Return the number input. If the dialog is canceled, return None.

>>>
>>> screen.numinput("Poker", "Your stakes:", 1000, minval=10, maxval=10000)

設(shè)置與特殊方法?

turtle.mode(mode=None)?
參數(shù)

mode -- 字符串 "standard", "logo" 或 "world" 其中之一

設(shè)置海龜模式 ("standard", "logo" 或 "world") 并執(zhí)行重置。如未指定模式則返回當(dāng)前的模式。

"standard" 模式與舊的 turtle 兼容。"logo" 模式與大部分 Logo 海龜繪圖兼容。"world" 模式使用用戶自定義的 "世界坐標(biāo)系"。注意: 在此模式下,如果 x/y 單位比率不等于 1 則角度會(huì)顯得扭曲。

模式

初始海龜朝向

正數(shù)角度

"standard"

朝右 (東)

逆時(shí)針

"logo"

朝上 (北)

順時(shí)針

>>>
>>> mode("logo")   # resets turtle heading to north
>>> mode()
'logo'
turtle.colormode(cmode=None)?
參數(shù)

cmode -- 數(shù)值 1.0 或 255 其中之一

Return the colormode or set it to 1.0 or 255. Subsequently r, g, b values of color triples have to be in the range 0..*cmode*.

>>>
>>> screen.colormode(1)
>>> turtle.pencolor(240, 160, 80)
Traceback (most recent call last):
     ...
TurtleGraphicsError: bad color sequence: (240, 160, 80)
>>> screen.colormode()
1.0
>>> screen.colormode(255)
>>> screen.colormode()
255
>>> turtle.pencolor(240,160,80)
turtle.getcanvas()?

返回此 TurtleScreen 的 Canvas 對(duì)象。供了解 Tkinter 的 Canvas 對(duì)象內(nèi)部機(jī)理的人士使用。

>>>
>>> cv = screen.getcanvas()
>>> cv
<turtle.ScrolledCanvas object ...>
turtle.getshapes()?

返回所有當(dāng)前可用海龜形狀的列表。

>>>
>>> screen.getshapes()
['arrow', 'blank', 'circle', ..., 'turtle']
turtle.register_shape(name, shape=None)?
turtle.addshape(name, shape=None)?

調(diào)用此函數(shù)有三種不同方式:

  1. name 為一個(gè) gif 文件的文件名, shapeNone: 安裝相應(yīng)的圖像形狀。:

    >>>
    >>> screen.register_shape("turtle.gif")
    

    備注

    當(dāng)海龜轉(zhuǎn)向時(shí)圖像形狀 不會(huì) 轉(zhuǎn)動(dòng),因此無法顯示海龜?shù)某?

  2. name 為指定的字符串,shape 為由坐標(biāo)值對(duì)構(gòu)成的元組: 安裝相應(yīng)的多邊形形狀。

    >>>
    >>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3)))
    
  3. name is an arbitrary string and shape is a (compound) Shape object: Install the corresponding compound shape.

將一個(gè)海龜形狀加入 TurtleScreen 的形狀列表。只有這樣注冊(cè)過的形狀才能通過執(zhí)行 shape(shapename) 命令來使用。

turtle.turtles()?

返回屏幕上的海龜列表。

>>>
>>> for turtle in screen.turtles():
...     turtle.color("red")
turtle.window_height()?

返回海龜窗口的高度。:

>>>
>>> screen.window_height()
480
turtle.window_width()?

返回海龜窗口的寬度。:

>>>
>>> screen.window_width()
640

Screen 專有方法, 而非繼承自 TurtleScreen?

turtle.bye()?

關(guān)閉海龜繪圖窗口。

turtle.exitonclick()?

bye() 方法綁定到 Screen 上的鼠標(biāo)點(diǎn)擊事件。

如果配置字典中 "using_IDLE" 的值為 False (默認(rèn)值) 則同時(shí)進(jìn)入主事件循環(huán)。注: 如果啟動(dòng) IDLE 時(shí)使用了 -n 開關(guān) (無子進(jìn)程),turtle.cfg 中此數(shù)值應(yīng)設(shè)為 True。在此情況下 IDLE 本身的主事件循環(huán)同樣會(huì)作用于客戶腳本。

turtle.setup(width=_CFG['width'], height=_CFG['height'], startx=_CFG['leftright'], starty=_CFG['topbottom'])?

設(shè)置主窗口的大小和位置。默認(rèn)參數(shù)值保存在配置字典中,可通過 turtle.cfg 文件進(jìn)行修改。

參數(shù)
  • width -- 如為一個(gè)整型數(shù)值,表示大小為多少像素,如為一個(gè)浮點(diǎn)數(shù)值,則表示屏幕的占比;默認(rèn)為屏幕的 50%

  • height -- 如為一個(gè)整型數(shù)值,表示高度為多少像素,如為一個(gè)浮點(diǎn)數(shù)值,則表示屏幕的占比;默認(rèn)為屏幕的 75%

  • startx -- 如為正值,表示初始位置距離屏幕左邊緣多少像素,負(fù)值表示距離右邊緣,None 表示窗口水平居中

  • starty -- 如為正值,表示初始位置距離屏幕上邊緣多少像素,負(fù)值表示距離下邊緣,None 表示窗口垂直居中

>>>
>>> screen.setup (width=200, height=200, startx=0, starty=0)
>>>              # sets window to 200x200 pixels, in upper left of screen
>>> screen.setup(width=.75, height=0.5, startx=None, starty=None)
>>>              # sets window to 75% of screen by 50% of screen and centers
turtle.title(titlestring)?
參數(shù)

titlestring -- 一個(gè)字符串,顯示為海龜繪圖窗口的標(biāo)題欄文本

設(shè)置海龜窗口標(biāo)題為 titlestring 指定的文本。

>>>
>>> screen.title("Welcome to the turtle zoo!")

公共類?

class turtle.RawTurtle(canvas)?
class turtle.RawPen(canvas)?
參數(shù)

canvas -- 一個(gè) tkinter.Canvas , ScrolledCanvasTurtleScreen 類對(duì)象

創(chuàng)建一個(gè)海龜。海龜對(duì)象具有 "Turtle/RawTurtle 方法" 一節(jié)所述的全部方法。

class turtle.Turtle?

RawTurtle 的子類,具有相同的接口,但其繪圖場(chǎng)所為默認(rèn)的 Screen 類對(duì)象,在首次使用時(shí)自動(dòng)創(chuàng)建。

class turtle.TurtleScreen(cv)?
參數(shù)

cv -- 一個(gè) tkinter.Canvas 類對(duì)象

提供面向屏幕的方法例如 setbg() 等。說明見上文。

class turtle.Screen?

TurtleScreen 的子類,增加了四個(gè)方法.

class turtle.ScrolledCanvas(master)?
參數(shù)

master -- 可容納 ScrolledCanvas 的 Tkinter 部件,即添加了滾動(dòng)條的 Tkinter-canvas

由 Screen 類使用,使其能夠自動(dòng)提供一個(gè) ScrolledCanvas 作為海龜?shù)睦L圖場(chǎng)所。

class turtle.Shape(type_, data)?
參數(shù)

type_ -- 字符串 "polygon", "image", "compound" 其中之一

實(shí)現(xiàn)形狀的數(shù)據(jù)結(jié)構(gòu)。(type_, data) 必須遵循以下定義:

type_

data

"polygon"

一個(gè)多邊形元組,即由坐標(biāo)值對(duì)構(gòu)成的元組

"image"

一個(gè)圖片 (此形式僅限內(nèi)部使用!)

"compound"

None (復(fù)合形狀必須使用 addcomponent() 方法來構(gòu)建)

addcomponent(poly, fill, outline=None)?
參數(shù)
  • poly -- 一個(gè)多邊形,即由數(shù)值對(duì)構(gòu)成的元組

  • fill -- 一種顏色,將用來填充 poly 指定的多邊形

  • outline -- 一種顏色,用于多邊形的輪廓 (如有指定)

示例:

>>>
>>> poly = ((0,0),(10,-5),(0,10),(-10,-5))
>>> s = Shape("compound")
>>> s.addcomponent(poly, "red", "blue")
>>> # ... add more components and then use register_shape()

參見 復(fù)合形狀

class turtle.Vec2D(x, y)?

一個(gè)二維矢量類,用來作為實(shí)現(xiàn)海龜繪圖的輔助類。也可能在海龜繪圖程序中使用。派生自元組,因此矢量也屬于元組!

提供的運(yùn)算 (a, b 為矢量, k 為數(shù)值):

  • a + b 矢量加法

  • a - b 矢量減法

  • a * b 內(nèi)積

  • k * aa * k 與標(biāo)量相乘

  • abs(a) a 的絕對(duì)值

  • a.rotate(angle) 旋轉(zhuǎn)

幫助與配置?

如何使用幫助?

Screen 和 Turtle 類的公用方法以文檔字符串提供了詳細(xì)的文檔。因此可以利用 Python 幫助工具獲取這些在線幫助信息:

  • 當(dāng)使用 IDLE 時(shí),輸入函數(shù)/方法調(diào)用將彈出工具提示顯示其簽名和文檔字符串的頭幾行。

  • 對(duì)文法或函數(shù)調(diào)用 help() 將顯示其文檔字符串:

    >>>
    >>> help(Screen.bgcolor)
    Help on method bgcolor in module turtle:
    
    bgcolor(self, *args) unbound turtle.Screen method
        Set or return backgroundcolor of the TurtleScreen.
    
        Arguments (if given): a color string or three numbers
        in the range 0..colormode or a 3-tuple of such numbers.
    
    
          >>> screen.bgcolor("orange")
          >>> screen.bgcolor()
          "orange"
          >>> screen.bgcolor(0.5,0,0.5)
          >>> screen.bgcolor()
          "#800080"
    
    >>> help(Turtle.penup)
    Help on method penup in module turtle:
    
    penup(self) unbound turtle.Turtle method
        Pull the pen up -- no drawing when moving.
    
        Aliases: penup | pu | up
    
        No argument
    
        >>> turtle.penup()
    
  • 方法對(duì)應(yīng)函數(shù)的文檔字符串的形式會(huì)有一些修改:

    >>>
    >>> help(bgcolor)
    Help on function bgcolor in module turtle:
    
    bgcolor(*args)
        Set or return backgroundcolor of the TurtleScreen.
    
        Arguments (if given): a color string or three numbers
        in the range 0..colormode or a 3-tuple of such numbers.
    
        Example::
    
          >>> bgcolor("orange")
          >>> bgcolor()
          "orange"
          >>> bgcolor(0.5,0,0.5)
          >>> bgcolor()
          "#800080"
    
    >>> help(penup)
    Help on function penup in module turtle:
    
    penup()
        Pull the pen up -- no drawing when moving.
    
        Aliases: penup | pu | up
    
        No argument
    
        Example:
        >>> penup()
    

這些修改版文檔字符串是在導(dǎo)入時(shí)與方法對(duì)應(yīng)函數(shù)的定義一起自動(dòng)生成的。

文檔字符串翻譯為不同的語言?

可使用工具創(chuàng)建一個(gè)字典,鍵為方法名,值為 Screen 和 Turtle 類公共方法的文檔字符串。

turtle.write_docstringdict(filename='turtle_docstringdict')?
參數(shù)

filename -- 一個(gè)字符串,表示文件名

創(chuàng)建文檔字符串字典并將其寫入 filename 指定的 Python 腳本文件。此函數(shù)必須顯示地調(diào)用 (海龜繪圖類并不使用此函數(shù))。文檔字符串字典將被寫入到 Python 腳本文件 filename.py。該文件可作為模板用來將文檔字符串翻譯為不同語言。

如果你 (或你的學(xué)生) 想使用本國(guó)語言版本的 turtle 在線幫助,你必須翻譯文檔字符串并保存結(jié)果文件,例如 turtle_docstringdict_german.py.

如果你在 turtle.cfg 文件中加入了相應(yīng)的條目,此字典將在導(dǎo)入模塊時(shí)被讀取并替代原有的英文版文檔字符串。

在撰寫本文檔時(shí)已經(jīng)有了德語和意大利語版的文檔字符串字典。(更多需求請(qǐng)聯(lián)系 glingl@aon.at)

如何配置 Screen 和 Turtle?

內(nèi)置的默認(rèn)配置是模仿舊 turtle 模塊的外觀和行為,以便盡可能地與其保持兼容。

如果你想使用不同的配置,以便更好地反映此模塊的特性或是更適合你的需求,例如在課堂中使用,你可以準(zhǔn)備一個(gè)配置文件 turtle.cfg,該文件將在導(dǎo)入模塊時(shí)被讀取并根據(jù)其中的設(shè)定修改模塊配置。

內(nèi)置的配置對(duì)應(yīng)以下的 turtle.cfg:

width = 0.5
height = 0.75
leftright = None
topbottom = None
canvwidth = 400
canvheight = 300
mode = standard
colormode = 1.0
delay = 10
undobuffersize = 1000
shape = classic
pencolor = black
fillcolor = black
resizemode = noresize
visible = True
language = english
exampleturtle = turtle
examplescreen = screen
title = Python Turtle Graphics
using_IDLE = False

選定條目的簡(jiǎn)短說明:

  • 開頭的四行對(duì)應(yīng) Screen.setup() 方法的參數(shù)。

  • 第 5 和 6 行對(duì)應(yīng) Screen.screensize() 方法的參數(shù)。

  • shape 可以是任何內(nèi)置形狀,即: arrow, turtle 等。更多信息可用 help(shape) 查看。

  • 如果你想使用無填充色 (即令海龜變透明),你必須寫 fillcolor = "" (但 cfg 文件中所有非空字符串都不可加引號(hào))。

  • 如果你想令海龜反映其狀態(tài),你必須使用 resizemode = auto。

  • If you set e.g. language = italian the docstringdict turtle_docstringdict_italian.py will be loaded at import time (if present on the import path, e.g. in the same directory as turtle).

  • exampleturtleexamplescreen 條目定義了相應(yīng)對(duì)象在文檔字符串中顯示的名稱。方法文檔字符串轉(zhuǎn)換為函數(shù)文檔字符串時(shí)將從文檔字符串中刪去這些名稱。

  • using_IDLE: Set this to True if you regularly work with IDLE and its -n switch ("no subprocess"). This will prevent exitonclick() to enter the mainloop.

turtle.cfg 文件可以保存于 turtle 所在目錄,當(dāng)前工作目錄也可以有一個(gè)同名文件。后者會(huì)重載覆蓋前者的設(shè)置。

Lib/turtledemo 目錄中也有一個(gè) turtle.cfg 文件。你可以將其作為示例進(jìn)行研究,并在運(yùn)行演示時(shí)查看其作用效果 (但最好不要在演示查看器中運(yùn)行)。

turtledemo --- 演示腳本集?

turtledemo 包匯集了一組演示腳本。這些腳本可以通過以下命令打開所提供的演示查看器運(yùn)行和查看:

python -m turtledemo

此外,你也可以單獨(dú)運(yùn)行其中的演示腳本。例如,:

python -m turtledemo.bytedesign

turtledemo 包目錄中的內(nèi)容:

  • 一個(gè)演示查看器 __main__.py,可用來查看腳本的源碼并即時(shí)運(yùn)行。

  • 多個(gè)腳本文件,演示 turtle 模塊的不同特性。所有示例可通過 Examples 菜單打開。也可以單獨(dú)運(yùn)行每個(gè)腳本。

  • 一個(gè) turtle.cfg 文件,作為說明如何編寫并使用模塊配置文件的示例模板。

演示腳本清單如下:

名稱

描述

相關(guān)特性

bytedesign

復(fù)雜的傳統(tǒng)海龜繪圖模式

tracer(), delay, update()

chaos

繪制 Verhulst 動(dòng)態(tài)模型,演示通過計(jì)算機(jī)的運(yùn)算可能會(huì)生成令人驚嘆的結(jié)果

世界坐標(biāo)系

clock

繪制模擬時(shí)鐘顯示本機(jī)的當(dāng)前時(shí)間

海龜作為表針, ontimer

colormixer

試驗(yàn) r, g, b 顏色模式

ondrag() 當(dāng)鼠標(biāo)拖動(dòng)

forest

繪制 3 棵廣度優(yōu)先樹

隨機(jī)化

fractalcurves

繪制 Hilbert & Koch 曲線

遞歸

lindenmayer

文化數(shù)學(xué) (印度裝飾藝術(shù))

L-系統(tǒng)

minimal_hanoi

漢諾塔

矩形海龜作為漢諾盤 (shape, shapesize)

nim

玩經(jīng)典的“尼姆”游戲,開始時(shí)有三堆小棒,與電腦對(duì)戰(zhàn)。

海龜作為小棒,事件驅(qū)動(dòng) (鼠標(biāo), 鍵盤)

paint

超極簡(jiǎn)主義繪畫程序

onclick() 當(dāng)鼠標(biāo)點(diǎn)擊

peace

初級(jí)技巧

海龜: 外觀與動(dòng)畫

penrose

非周期性地使用風(fēng)箏和飛鏢形狀鋪滿平面

stamp() 印章

planet_and_moon

模擬引力系統(tǒng)

復(fù)合開關(guān), Vec2D

round_dance

兩兩相對(duì)并不斷旋轉(zhuǎn)舞蹈的海龜

復(fù)合形狀, clone shapesize, tilt, get_shapepoly, update

sorting_animate

動(dòng)態(tài)演示不同的排序方法

簡(jiǎn)單對(duì)齊, 隨機(jī)化

tree

一棵 (圖形化的) 廣度優(yōu)先樹 (使用生成器)

clone() 克隆

two_canvases

簡(jiǎn)單設(shè)計(jì)

兩塊畫布上的海龜

wikipedia

一個(gè)來自介紹海龜繪圖的維基百科文章的圖案

clone(), undo()

yinyang

另一個(gè)初級(jí)示例

circle() 畫圓

祝你玩得開心!

Python 2.6 之后的變化?

  • Turtle.tracer(), Turtle.window_width()Turtle.window_height() 方法已被去除。具有這些名稱和功能的方法現(xiàn)在只限于 Screen 類的方法。但其對(duì)應(yīng)的函數(shù)仍然可用。(實(shí)際上在 Python 2.6 中這些方法就已經(jīng)只是從對(duì)應(yīng)的 TurtleScreen/Screen 類的方法復(fù)制而來。)

  • Turtle.fill() 方法已被去除。begin_fill()end_fill() 的行為則有細(xì)微改變: 現(xiàn)在每個(gè)填充過程必須以一個(gè) end_fill() 調(diào)用來結(jié)束。

  • 新增了一個(gè) Turtle.filling() 方法。該方法返回一個(gè)布爾值: 如果填充過程正在進(jìn)行為 True,否則為 False。此行為相當(dāng)于 Python 2.6 中不帶參數(shù)的 fill() 調(diào)用。

Python 3.0 之后的變化?

  • 新增了 Turtle.shearfactor(), Turtle.shapetransform()Turtle.get_shapepoly() 方法。這樣就可以使用所有標(biāo)準(zhǔn)線性變換來調(diào)整海龜形狀。Turtle.tiltangle() 的功能已被加強(qiáng): 現(xiàn)在可被用來獲取或設(shè)置傾角。Turtle.settiltangle() 已棄用。

  • 新增了 Screen.onkeypress() 方法作為對(duì) Screen.onkey() 的補(bǔ)充,實(shí)際就是將行為綁定到 keyrelease 事件。后者相應(yīng)增加了一個(gè)別名: Screen.onkeyrelease()。

  • 新增了 Screen.mainloop() 方法。這樣當(dāng)僅需使用 Screen 和 Turtle 對(duì)象時(shí)不需要再額外導(dǎo)入 mainloop()。

  • 新增了兩個(gè)方法 Screen.textinput()Screen.numinput()。用來彈出對(duì)話框接受輸入并分別返回字符串和數(shù)值。

  • 兩個(gè)新的示例腳本 tdemo_nim.pytdemo_round_dance.py 被加入到 Lib/turtledemo 目錄中。