turtle
--- 海龜繪圖?
源碼: Lib/turtle.py
概述?
海龜繪圖是對(duì) 最早在 Logo 中引入的受歡迎的幾何繪圖工具 的實(shí)現(xiàn),它由 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 在 1967 年開發(fā)。
入門?
請(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 度。
在 Python 中,海龜繪圖提供了一個(gè)實(shí)體“海龜”形象(帶有畫筆的小機(jī)器動(dòng)物),假定它在地板上平鋪的紙張上畫線。
對(duì)于學(xué)習(xí)者來說這是一種接觸編程概念和與軟件交互的高效且久經(jīng)驗(yàn)證的方式,因?yàn)樗芴峁┘磿r(shí)、可見的反饋。 它還能提供方便直觀的圖形輸出。
海龜繪圖最初是作為一種教學(xué)工具被創(chuàng)建的,供教師在課堂上使用。 對(duì)于需要生成一些圖形輸出的程序員來說這是一種無需在工作中引入更高復(fù)雜度或外部庫的方式。
教程?
新用戶應(yīng)當(dāng)從這里開始。 在本教程中我們將探索海龜繪圖的一些基本知識(shí)。
啟動(dòng)海龜環(huán)境?
在 Python shell 中,導(dǎo)入 turtle
模塊的所有對(duì)象:
from turtle import *
如果你遇到了 No module named '_tkinter'
錯(cuò)誤,則需要在你的系統(tǒng)中安裝 Tk 接口包
。
基本繪圖?
讓海龜前進(jìn) 100 步:
forward(100)
你應(yīng)該會(huì)看到(最可能的情況,是在你的顯示器的一個(gè)新窗口中)海龜畫出一條線段,方向朝東。 改變海龜?shù)姆较?,讓它向左轉(zhuǎn) 120 度(逆時(shí)針):
left(120)
讓我們繼續(xù)畫一個(gè)三角形:
forward(100)
left(120)
forward(100)
注意以一個(gè)箭頭表示的海龜是如何隨著你的操縱指向不同方向的。
請(qǐng)繼續(xù)嘗試這些命令,還可以使用 backward()
和 right()
。
畫筆控制?
試著改變顏色 —— 例如,color('blue')
和線寬 —— 例如,width(3)
然后再次繪制。
您也可以在不繪制線條的情況下移動(dòng)海龜,即在移動(dòng)前抬起畫筆: up()
。 要重新開始繪制,請(qǐng)使用 down()
。
海龜?shù)奈恢?a class="headerlink" href="#the-turtle-s-position" title="Link to this heading">?
將海龜送回起點(diǎn)(這適用于海龜消失在屏幕之外的情況):
home()
初始位置在海龜屏幕的中心。 如果你需要知道具體數(shù)值,可以這樣獲取海龜?shù)?x-y 坐標(biāo):
pos()
初始點(diǎn)在 (0, 0)
。
過一段時(shí)間后,也許可以考慮清空窗口這樣我們就可以重新開始:
clearscreen()
使用算法繪制圖案?
使用循環(huán),可以構(gòu)建出各種幾何圖案:
for steps in range(100):
for c in ('blue', 'red', 'green'):
color(c)
forward(steps)
right(30)
- 當(dāng)然,這僅受限于你的想象力!
讓我們繪制本頁面頂部的星形。 我們想要用紅色線條,黃色填充:
color('red')
fillcolor('yellow')
就像用 up()
和 down()
決定是否畫線一樣,填充也可以打開或關(guān)閉:
begin_fill()
接下來我們將創(chuàng)建一個(gè)循環(huán):
while True:
forward(200)
left(170)
if abs(pos()) < 1:
break
abs(pos()) < 1
是確定海龜何時(shí)回到初始點(diǎn)的好辦法。
最后,完成填充:
end_fill()
(請(qǐng)注意只有在你給出 end_fill()
命令時(shí)才會(huì)實(shí)際進(jìn)行填充。)
如何...?
本節(jié)介紹一些典型的海龜使用案例和操作方式。
盡快地開始?
海龜繪圖形的樂趣之一在于通過簡(jiǎn)單的命令就能獲得即時(shí)的視覺反饋 —— 這是一種向兒童介紹編程理念的絕佳方式,而且開銷最小(當(dāng)然,不僅適用于兒童)。
海龜模塊將其所有基本功能作為函數(shù)公開,并通過 from turtle import *
提供使這一切成為可能。
海龜繪圖教程
介紹了相關(guān)的步驟。
值得注意的是許多海烏命令還有更簡(jiǎn)潔的等價(jià)形式,例如 fd()
對(duì)應(yīng) forward()
。
對(duì)于不擅長(zhǎng)打字的學(xué)習(xí)者來說這尤其有用。
你需要在系統(tǒng)中安裝
Tk 接口軟件包
,才能使用海龜繪圖。 請(qǐng)注意這并不總是很容易做到的,所以如果你打算讓學(xué)習(xí)者使用海龜繪圖請(qǐng)事先檢查這一點(diǎn)。
使用 turtle
模塊命名空間?
使用 from turtle import *
是很方便 —— 但要注意它導(dǎo)入的對(duì)象集相當(dāng)大,如果你還在做海龜繪圖以外的事情就有發(fā)生名稱沖突的風(fēng)險(xiǎn)(如果你在可能導(dǎo)入了其他模塊的腳本中使用海龜繪圖則可能會(huì)遇到更大的問題)。
解決辦法是使用 import turtle
—— fd()
將變成 turtle.fd()
,
width()
將變成 turtle.width()
等等。 (如果反復(fù)輸入“turtle”太過煩瑣,還可改成 import turtle as t
等。)
在腳本中使用海龜繪圖?
建議使用上文所述的 turtle
模塊命名空間,例如:
import turtle as t
from random import random
for i in range(100):
steps = int(random() * 100)
angle = int(random() * 360)
t.right(angle)
t.fd(steps)
但還需要另一個(gè)步驟 —— 因?yàn)橐坏┠_本結(jié)束,Python 將會(huì)同時(shí)關(guān)閉海龜?shù)拇翱凇?請(qǐng)?zhí)砑?
t.mainloop()
到腳本的末尾。 現(xiàn)在腳本將等待被關(guān)閉而不會(huì)自動(dòng)退出直到被主動(dòng)終止,例如海龜繪圖窗口被關(guān)閉。
使用面向?qū)ο蟮暮}斃L圖?
參見
除了非?;镜娜腴T目的,或是盡快嘗試操作之外,使用面向?qū)ο蟮姆绞竭M(jìn)行海龜繪圖更為常見也更為強(qiáng)大。 例如,這將允許屏幕上同時(shí)存在多只海龜。
在這種方式下,各種海龜命令都是對(duì)象(主要是 Turtle
對(duì)象)的方法。 你 可以 在 shell 中使用面向?qū)ο蟮姆椒ǎ?Python 腳本中使用是更為典型的做法。
這樣上面的例子就將變成:
from turtle import Turtle
from random import random
t = Turtle()
for i in range(100):
steps = int(random() * 100)
angle = int(random() * 360)
t.right(angle)
t.fd(steps)
t.screen.mainloop()
請(qǐng)注意最后一行。 t.screen
是 Turtle 實(shí)例所在的 Screen
的實(shí)例;它是與海龜一起自動(dòng)創(chuàng)建的。
海龜?shù)钠聊豢梢员蛔远x,例如:
t.screen.title('Object-oriented turtle demo')
t.screen.bgcolor("orange")
海龜繪圖參考?
備注
以下文檔給出了函數(shù)的參數(shù)列表。對(duì)于方法來說當(dāng)然還有額外的第一個(gè)參數(shù) self,這里省略了。
Turtle 方法?
- 海龜動(dòng)作
-
- 移動(dòng)和繪制
-
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è)置與度量單位
- 畫筆控制
-
- 繪圖狀態(tài)
- 顏色控制
- 填充
- 更多繪圖控制
- 海龜狀態(tài)
-
- 可見性
- 外觀
-
shape()
形狀resizemode()
大小調(diào)整模式shapesize()
|turtlesize()
形狀大小shearfactor()
剪切因子tiltangle()
傾角tilt()
傾斜get_shapepoly()
獲取形狀多邊形
- 使用事件
- 特殊海龜方法
-
begin_poly()
開始記錄多邊形end_poly()
結(jié)束記錄多邊形get_poly()
獲取多邊形clone()
克隆getturtle()
|getpen()
獲取海龜畫筆getscreen()
獲取屏幕setundobuffer()
設(shè)置撤消緩沖區(qū)undobufferentries()
撤消緩沖區(qū)條目數(shù)
TurtleScreen/Screen 方法?
- 窗口控制
- 動(dòng)畫控制
- 使用屏幕事件
-
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()
獲取形狀register_shape()
|addshape()
添加形狀turtles()
所有海龜window_height()
窗口高度window_width()
窗口寬度 - 輸入方法
-
textinput()
文本輸入numinput()
數(shù)字輸入 - Screen 專有方法
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
-
如果 y 為
None
,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.teleport(x, y=None, *, fill_gap=False)?
-
- 參數(shù):
-
-
x -- 一個(gè)數(shù)值或
None
-
y -- 一個(gè)數(shù)值或
None
-
fill_gap -- 布爾
-
將海龜移到某個(gè)絕對(duì)位置。 不同于 goto(x, y),這將不會(huì)畫一條線段。 海龜?shù)姆较虿蛔儭?如果當(dāng)前正在填充,離開后原位置上的多邊形將被填充,在移位后將再次開始填充。 這可以通過 fill_gap=True 來禁用,此設(shè)置將使在移位期間海龜?shù)囊苿?dòng)軌跡線像在 goto(x, y) 中一樣被當(dāng)作填充邊緣。
>>>>>> tp = turtle.pos() >>> tp (0.00,0.00) >>> turtle.teleport(60) >>> turtle.pos() (60.00,0.00) >>> turtle.teleport(y=10) >>> turtle.pos() (60.00,10.00) >>> turtle.teleport(20, 30) >>> turtle.pos() (20.00,30.00)
Added in version 3.12.
- 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) # 畫一個(gè)半圓 >>> 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") >>> stamp_id = turtle.stamp() >>> 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è)海龜印章。如果 n 為
None
則刪除全部印章,如果 n > 0 則刪除前 n 個(gè)印章,否則如果 n < 0 則刪除后 n 個(gè)印章。>>>>>> for i in range(8): ... unused_stamp_id = turtle.stamp() ... turtle.fd(30) >>> 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 將角度的度量單位改為梯度(grad 或稱 gon, grade 或 gradian,等于直角的 1/100。) >>> 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.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) # 從這里開始,畫出寬度為10的線
- 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)) # 整數(shù),而非浮點(diǎn)數(shù) >>> 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)情況下 move 為
False
。>>>>>> 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.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)整模式為 "user" 時(shí),海龜會(huì)基于其拉伸因子調(diào)整外觀: stretch_wid 為垂直于其朝向的寬度拉伸因子,stretch_len 為平行于其朝向的長(zhǎng)度拉伸因子,outline 決定形狀輪廓線的寬度。
>>>>>> 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.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 --
True
或False
-- 如為True
則將添加一個(gè)新綁定,否則將取代先前的綁定
-
將 fun 指定的函數(shù)綁定到鼠標(biāo)點(diǎn)擊此海龜事件。如果 fun 值為
None
,則移除現(xiàn)有的綁定。以下為使用匿名海龜即過程式的示例:>>>>>> def turn(x, y): ... left(180) ... >>> onclick(turn) # 現(xiàn)在點(diǎn)擊海龜將使其轉(zhuǎn)向。 >>> onclick(None) # 事件綁定將被移除
- 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 --
True
或False
-- 如為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) # 點(diǎn)擊turtle會(huì)將填充顏色設(shè)置為紅色。 >>> turtle.onrelease(turtle.unglow) # 釋放會(huì)使它變得透明
- 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 --
True
或False
-- 如為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ù)。 如果 size 為None
,則禁用撤銷緩沖區(qū)。>>>>>> turtle.setundobuffer(42)
- turtle.undobufferentries()?
-
返回撤銷緩沖區(qū)里的條目數(shù)。
>>>>>> while undobufferentries(): ... undo()
復(fù)合形狀?
要使用由多個(gè)不同顏色多邊形構(gòu)成的復(fù)合海龜形狀,你必須明確地使用輔助類 Shape
,具體步驟如下:
-
創(chuàng)建一個(gè)空 Shape 對(duì)象,類型為 "compound"。
-
可根據(jù)需要使用
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")
-
接下來將 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)前背景圖片。如果 picname 為None
,則返回當(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) # 一個(gè)正八邊形
動(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í)行。(可被用來加速復(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)。(參見 methodlisten()
方法。)>>>>>> 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 --
True
或False
-- 如為True
則將添加一個(gè)新綁定,否則將取代先前的綁定
-
綁定 fun 指定的函數(shù)到鼠標(biāo)點(diǎn)擊屏幕事件。如果 fun 值為
None
,則移除現(xiàn)有的綁定。以下示例使用一個(gè) TurtleScreen 實(shí)例
screen
和一個(gè) Turtle 實(shí)例turtle
:>>>>>> screen.onclick(turtle.goto) # 后續(xù)對(duì) TurtleScreen 的點(diǎn)擊 >>> # 將使海龜移至被點(diǎn)擊的位置。 >>> screen.onclick(None) # 再次移除事件綁定
備注
此 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() ### 讓海龜隨意前進(jìn) >>> running = False
輸入方法?
- 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ù)值 (可選)
-
彈出一個(gè)用于輸入數(shù)值的對(duì)話框窗口。 title 是對(duì)話框窗口的標(biāo)題,prompt 是通常用來描述要輸入的數(shù)字信息的文本。 default: 默認(rèn)值, minval: 可輸入的最小值, maxval: 可輸入的最大值。 如果給出 minval .. maxval 則輸入的數(shù)值必須在此范圍以內(nèi)。 如未給出,則將發(fā)出提示并且讓話框保持打開以便修正。 返回輸入的數(shù)值。 如果對(duì)話框被取消,則返回
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") # 將海龜重置為朝向北方 >>> mode() 'logo'
- turtle.colormode(cmode=None)?
-
- 參數(shù):
-
cmode -- 數(shù)值 1.0 或 255 其中之一
返回 colormode 或?qū)⑵湓O(shè)為 1.0 或 255。 后續(xù)表示三原色的 r, g, b 值必須在 0..*cmode* 范圍之內(nèi)。
>>>>>> 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ù)有三種不同方式:
-
name 為一個(gè) gif 文件的文件名, shape 為
None
: 安裝相應(yīng)的圖像形狀。:>>>>>> screen.register_shape("turtle.gif")
備注
當(dāng)海龜轉(zhuǎn)向時(shí)圖像形狀 不會(huì) 轉(zhuǎn)動(dòng),因此無法顯示海龜?shù)某?
-
name 為指定的字符串,shape 為由坐標(biāo)值對(duì)構(gòu)成的元組: 安裝相應(yīng)的多邊形形狀。
>>>>>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3)))
-
name 為任意字符串而 shape 為 (復(fù)合)
Shape
對(duì)象:安裝相應(yīng)的復(fù)合形狀。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) >>> # 設(shè)置窗口為 200x200 像素,位于屏幕左上角 >>> screen.setup(width=.75, height=0.5, startx=None, starty=None) >>> # 設(shè)置窗口寬度為屏幕的 75% 高度為屏幕的 50% 并居中
- 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
,ScrolledCanvas
或TurtleScreen
創(chuàng)建一個(gè)海龜。海龜對(duì)象具有 "Turtle/RawTurtle 方法" 一節(jié)所述的全部方法。
- class turtle.Turtle?
-
RawTurtle 的子類,具有相同的接口,但其繪圖場(chǎng)所為默認(rèn)的
Screen
類對(duì)象,在首次使用時(shí)自動(dòng)創(chuàng)建。
- 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") >>> # ... 添加更多組件,然后使用 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 * a
和a * k
與標(biāo)量相乘 -
abs(a)
a 的絕對(duì)值 -
a.rotate(angle)
旋轉(zhuǎn)
-
說明?
海龜對(duì)象在屏幕對(duì)象上繪圖,在 turtle 的面向?qū)ο蠼涌谥杏性S多關(guān)鍵的類可被用于創(chuàng)建它們并將它們相互關(guān)聯(lián)。
Turtle
實(shí)例將自動(dòng)創(chuàng)建一個(gè)
Screen
實(shí)例,如果它還未創(chuàng)建的話。
Turtle
是 RawTurtle
的子類,它 不會(huì) 自動(dòng)創(chuàng)建繪圖區(qū)域
—— 需要為其提供或創(chuàng)建一個(gè) canvas。 canvas 可以是一個(gè) tkinter.Canvas
,
ScrolledCanvas
或 TurtleScreen
。
TurtleScreen
是基本的海龜繪圖區(qū)域。 Screen
是 TurtleScreen
的子類,并包括
一些額外方法
用來管理其外觀(包括大小和標(biāo)題)及行為。 TurtleScreen
的構(gòu)造器需要一個(gè) tkinter.Canvas
或 ScrolledCanvas
作為參數(shù)。
海龜繪圖形的函數(shù)式接口使用 Turtle
和 TurtleScreen
/Screen
的各種方法。
在下層,每當(dāng)從 Screen
方法派生的函數(shù)被調(diào)用時(shí)就會(huì)自動(dòng)創(chuàng)建一個(gè)屏幕對(duì)象。 同樣地,每當(dāng)從 Turtle 方法派生的函數(shù)被調(diào)用時(shí)也都會(huì)自動(dòng)創(chuàng)建一個(gè) Turtle 對(duì)象。
要在一個(gè)屏幕中使用多個(gè)海龜,就必須使用面向?qū)ο蟮慕涌凇?/p>
幫助與配置?
如何使用幫助?
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é)生) 想使用本國語言版本的 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 = ""
(但在but all nonempty strings must not have quotes in the cfg 文件中所有非空字符串都不可加引號(hào))。 -
如果你想令海龜反映其狀態(tài),你必須使用
resizemode = auto
。 -
例如當(dāng)你設(shè)置了
language = italian
則文檔字符串字典turtle_docstringdict_italian.py
將在導(dǎo)入時(shí)被加載(如果它存在于導(dǎo)入路徑,即與turtle
相同的目錄中)。 -
exampleturtle 和 examplescreen 條目定義了相應(yīng)對(duì)象在文檔字符串中顯示的名稱。方法文檔字符串轉(zhuǎn)換為函數(shù)文檔字符串時(shí)將從文檔字符串中刪去這些名稱。
-
using_IDLE: 如果你經(jīng)常使用 IDLE 及其
-n
開關(guān)選項(xiàng)("無子進(jìn)程")則將此項(xiàng)設(shè)為True
。 這將阻止exitonclick()
進(jìn)入主事件循環(huán)。
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)海龜繪圖模式 |
|
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 顏色模式 |
|
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)主義繪畫程序 |
|
peace |
初級(jí)技巧 |
海龜: 外觀與動(dòng)畫 |
penrose |
非周期性地使用風(fēng)箏和飛鏢形狀鋪滿平面 |
|
planet_and_moon |
模擬引力系統(tǒng) |
復(fù)合開關(guān), |
rosette |
一個(gè)來自介紹海龜繪圖的維基百科文章的圖案 |
|
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)先樹 (使用生成器) |
|
two_canvases |
簡(jiǎn)單設(shè)計(jì) |
兩塊畫布上的海龜 |
yinyang |
另一個(gè)初級(jí)示例 |
|
祝你玩得開心!
Python 2.6 之后的變化?
-
Turtle.tracer
,Turtle.window_width
和Turtle.window_height
等方法已被去除。 具有這些名稱和功能的方法現(xiàn)在只限于作為Screen
的方法。 自這些方法派生的函數(shù)仍保持可用。 (實(shí)際上在 Python 2.6 中這些方法就已經(jīng)只是對(duì)應(yīng)TurtleScreen
/Screen
方法的副本了。) -
Turtle.fill()
方法已被去除。begin_fill()
和end_fill()
的行為則有細(xì)微改變:現(xiàn)在每個(gè)填充過程必須以一個(gè)end_fill()
調(diào)用來結(jié)束。 -
增加了一個(gè)
Turtle.filling
方法。 該方法返回一個(gè)布爾值:如果填充過程正在運(yùn)行則為True
,否則為False
。 此行為對(duì)應(yīng)于 Python 2.6 中一個(gè)不帶參數(shù)的fill()
調(diào)用。
Python 3.0 之后的變化?
-
增加了
Turtle
方法shearfactor()
,shapetransform()
和get_shapepoly()
。 這樣就可以使用所有的常規(guī)線性變換來改變海龜形狀。tiltangle()
的功能已得到加強(qiáng):現(xiàn)在它可以被用來獲取或設(shè)置傾斜角度。 -
增加了
Screen
方法onkeypress()
作為onkey()
的補(bǔ)充。 當(dāng)后者將動(dòng)作綁定到松開按鍵事件時(shí),還將為它添加一個(gè)別名:onkeyrelease()
。 -
增加了
Screen.mainloop
方法,這樣在操作Screen
和Turtle
對(duì)象時(shí)就無需再使用單獨(dú)的mainloop()
函數(shù)。 -
增加了兩個(gè)輸入方法:
Screen.textinput
和Screen.numinput
。 這兩個(gè)方法會(huì)彈出輸入對(duì)話框接受輸入并分別返回字符串和數(shù)字。 These pop up input dialogs and return strings and numbers respectively. -
兩個(gè)新的示例腳本
tdemo_nim.py
和tdemo_round_dance.py
被加入到Lib/turtledemo
目錄中。