App下載

Python海龜繪圖庫:從入門到精通 - Python官方文檔

來源: Python官方文檔 2025-01-08 11:09:47 瀏覽數 (183)
反饋

turtle --- 海龜繪圖?

源碼: Lib/turtle.py


概述?

海龜繪圖是對 最早在 Logo 中引入的受歡迎的幾何繪圖工具 的實現,它由 Wally Feurzeig, Seymour Papert 和 Cynthia Solomon 在 1967 年開發(fā)。

入門?

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

在 Python 中,海龜繪圖提供了一個實體“海龜”形象(帶有畫筆的小機器動物),假定它在地板上平鋪的紙張上畫線。

對于學習者來說這是一種接觸編程概念和與軟件交互的高效且久經驗證的方式,因為它能提供即時、可見的反饋。 它還能提供方便直觀的圖形輸出。

海龜繪圖最初是作為一種教學工具被創(chuàng)建的,供教師在課堂上使用。 對于需要生成一些圖形輸出的程序員來說這是一種無需在工作中引入更高復雜度或外部庫的方式。

教程?

新用戶應當從這里開始。 在本教程中我們將探索海龜繪圖的一些基本知識。

啟動海龜環(huán)境?

在 Python shell 中,導入 turtle 模塊的所有對象:

from turtle import *

如果你遇到了 No module named '_tkinter' 錯誤,則需要在你的系統中安裝 Tk 接口包。

基本繪圖?

讓海龜前進 100 步:

forward(100)

你應該會看到(最可能的情況,是在你的顯示器的一個新窗口中)海龜畫出一條線段,方向朝東。 改變海龜的方向,讓它向左轉 120 度(逆時針):

left(120)

讓我們繼續(xù)畫一個三角形:

forward(100)
left(120)
forward(100)

注意以一個箭頭表示的海龜是如何隨著你的操縱指向不同方向的。

請繼續(xù)嘗試這些命令,還可以使用 backward()right()。

畫筆控制?

試著改變顏色 —— 例如,color('blue') 和線寬 —— 例如,width(3) 然后再次繪制。

您也可以在不繪制線條的情況下移動海龜,即在移動前抬起畫筆: up()。 要重新開始繪制,請使用 down()。

海龜的位置?

將海龜送回起點(這適用于海龜消失在屏幕之外的情況):

home()

初始位置在海龜屏幕的中心。 如果你需要知道具體數值,可以這樣獲取海龜的 x-y 坐標:

pos()

初始點在 (0, 0)。

過一段時間后,也許可以考慮清空窗口這樣我們就可以重新開始:

clearscreen()

使用算法繪制圖案?

使用循環(huán),可以構建出各種幾何圖案:

for steps in range(100):
    for c in ('blue', 'red', 'green'):
        color(c)
        forward(steps)
        right(30)

- 當然,這僅受限于你的想象力!

讓我們繪制本頁面頂部的星形。 我們想要用紅色線條,黃色填充:

color('red')
fillcolor('yellow')

就像用 up()down() 決定是否畫線一樣,填充也可以打開或關閉:

begin_fill()

接下來我們將創(chuàng)建一個循環(huán):

while True:
    forward(200)
    left(170)
    if abs(pos()) < 1:
        break

abs(pos()) < 1 是確定海龜何時回到初始點的好辦法。

最后,完成填充:

end_fill()

(請注意只有在你給出 end_fill() 命令時才會實際進行填充。)

如何...?

本節(jié)介紹一些典型的海龜使用案例和操作方式。

盡快地開始?

海龜繪圖形的樂趣之一在于通過簡單的命令就能獲得即時的視覺反饋 —— 這是一種向兒童介紹編程理念的絕佳方式,而且開銷最?。ó斎?,不僅適用于兒童)。

海龜模塊將其所有基本功能作為函數公開,并通過 from turtle import * 提供使這一切成為可能。 海龜繪圖教程 介紹了相關的步驟。

值得注意的是許多海烏命令還有更簡潔的等價形式,例如 fd() 對應 forward()。 對于不擅長打字的學習者來說這尤其有用。

你需要在系統中安裝 Tk 接口軟件包,才能使用海龜繪圖。 請注意這并不總是很容易做到的,所以如果你打算讓學習者使用海龜繪圖請事先檢查這一點。

使用 turtle 模塊命名空間?

使用 from turtle import * 是很方便 —— 但要注意它導入的對象集相當大,如果你還在做海龜繪圖以外的事情就有發(fā)生名稱沖突的風險(如果你在可能導入了其他模塊的腳本中使用海龜繪圖則可能會遇到更大的問題)。

解決辦法是使用 import turtle —— fd() 將變成 turtle.fd(), width() 將變成 turtle.width() 等等。 (如果反復輸入“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)

但還需要另一個步驟 —— 因為一旦腳本結束,Python 將會同時關閉海龜的窗口。 請?zhí)砑?

t.mainloop()

到腳本的末尾。 現在腳本將等待被關閉而不會自動退出直到被主動終止,例如海龜繪圖窗口被關閉。

使用面向對象的海龜繪圖?

除了非常基本的入門目的,或是盡快嘗試操作之外,使用面向對象的方式進行海龜繪圖更為常見也更為強大。 例如,這將允許屏幕上同時存在多只海龜。

在這種方式下,各種海龜命令都是對象(主要是 Turtle 對象)的方法。 你 可以 在 shell 中使用面向對象的方法,但在 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()

請注意最后一行。 t.screen 是 Turtle 實例所在的 Screen 的實例;它是與海龜一起自動創(chuàng)建的。

海龜的屏幕可以被自定義,例如:

t.screen.title('Object-oriented turtle demo')
t.screen.bgcolor("orange")

海龜繪圖參考?

備注

以下文檔給出了函數的參數列表。對于方法來說當然還有額外的第一個參數 self,這里省略了。

Turtle 方法?

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

TurtleScreen/Screen 方法?

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

RawTurtle/Turtle 方法和對應函數?

本節(jié)中的大部分示例都使用 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

如果 yNonex 應為一個表示坐標的數值對或 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.teleport(x, y=None, *, fill_gap=False)?
參數:
  • x -- 一個數值或 None

  • y -- 一個數值或 None

  • fill_gap -- 布爾

將海龜移到某個絕對位置。 不同于 goto(x, y),這將不會畫一條線段。 海龜的方向不變。 如果當前正在填充,離開后原位置上的多邊形將被填充,在移位后將再次開始填充。 這可以通過 fill_gap=True 來禁用,此設置將使在移位期間海龜的移動軌跡線像在 goto(x, y) 中一樣被當作填充邊緣。

>>>
>>> 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)?
參數:

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)  # 畫一個半圓
>>> 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")
>>> stamp_id = turtle.stamp()
>>> 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 個海龜印章。如果 nNone 則刪除全部印章,如果 n > 0 則刪除前 n 個印章,否則如果 n < 0 則刪除后 n 個印章。

>>>
>>> for i in range(8):
...     unused_stamp_id = turtle.stamp()
...     turtle.fd(30)
>>> turtle.clearstamps(2)
>>> turtle.clearstamps(-2)
>>> turtle.clearstamps()
turtle.undo()?

撤消 (或連續(xù)撤消) 最近的一個 (或多個) 海龜動作??沙废拇螖涤沙废彌_區(qū)的大小決定。

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

獲取海龜的狀態(tài)?

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

將角度的度量單位改為梯度(grad 或稱 gon,
grade 或 gradian,等于直角的 1/100。)
>>> 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

畫筆控制?

繪圖狀態(tài)?

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)   # 從這里開始,畫出寬度為10的線
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": 數值

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

>>>
>>> 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))  # 整數,而非浮點數
>>> 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()?

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

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

在繪制要填充的形狀之前調用。

turtle.end_fill()?

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

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

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

從屏幕中刪除指定海龜的繪圖。不移動海龜。海龜的狀態(tài)和位置以及其他海龜的繪圖不受影響。

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

  • move -- True/False

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

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

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

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

海龜狀態(tài)?

可見性?

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": 不調整海龜的外觀大小。

resizemode("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 為平行于其朝向的長度拉伸因子,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)?
參數:

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.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 必須不為零,否則會引發(fā)錯誤。 根據指定矩陣修改拉伸因子 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()?

返回以坐標值對元組表示的當前形狀多邊形。這可以用于定義一個新形狀或一個復合形狀的多個組成部分。

>>>
>>> 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 -- TrueFalse -- 如為 True 則將添加一個新綁定,否則將取代先前的綁定

fun 指定的函數綁定到鼠標點擊此海龜事件。如果 fun 值為 None,則移除現有的綁定。以下為使用匿名海龜即過程式的示例:

>>>
>>> def turn(x, y):
...     left(180)
...
>>> onclick(turn)  # 現在點擊海龜將使其轉向。
>>> onclick(None)  # 事件綁定將被移除
turtle.onrelease(fun, btn=1, add=None)?
參數:
  • fun -- 一個函數,調用時將傳入兩個參數表示在畫布上點擊的坐標。

  • btn -- 鼠標按鈕編號,默認值為 1 (鼠標左鍵)

  • add -- TrueFalse -- 如為 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)     # 點擊turtle會將填充顏色設置為紅色。
>>> turtle.onrelease(turtle.unglow) # 釋放會使它變得透明
turtle.ondrag(fun, btn=1, add=None)?
參數:
  • fun -- 一個函數,調用時將傳入兩個參數表示在畫布上點擊的坐標。

  • btn -- 鼠標按鈕編號,默認值為 1 (鼠標左鍵)

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

fun 指定的函數綁定到在此海龜上移動鼠標事件。如果 fun 值為 None,則移除現有的綁定。

注: 在海龜上移動鼠標事件之前應先發(fā)生在此海龜上點擊鼠標事件。

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

創(chuàng)建并返回海龜的克隆體,具有相同的位置、朝向和海龜屬性。

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

返回海龜對象自身。唯一合理的用法: 作為一個函數來返回 "匿名海龜":

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

返回作為海龜繪圖場所的 TurtleScreen 類對象。該對象將可調用 TurtleScreen 方法。

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

size -- 一個整型數值或 None

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

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

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

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

復合形狀?

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

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

  2. 可根據需要使用 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")
    
  3. 接下來將 Shape 對象添加到 Screen 對象的形狀列表并使用它:

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

備注

Shape 類在 register_shape() 方法的內部以多種方式使用。應用程序編寫者 只有 在使用上述的復合形狀時才需要處理 Shape 類。

TurtleScreen/Screen 方法及對應函數?

本節(jié)中的大部分示例都使用 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",則刪除當前背景圖片。如果 picnameNone,則返回當前背景圖片文件名。:

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

備注

此 TurtleScreen 方法作為全局函數時只有一個名字 clearscreen。全局函數 clear 所對應的是 Turtle 方法 clear。

turtle.clearscreen()?

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

turtle.reset()

備注

此 TurtleScreen 方法作為全局函數時只有一個名字 resetscreen。全局函數 reset 所對應的是 Turtle 方法 reset。

turtle.resetscreen()?

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

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

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

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

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

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

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

turtle.setworldcoordinates(llx, lly, urx, ury)?
參數:
  • llx -- 一個數值, 畫布左下角的 x-坐標

  • lly -- 一個數值, 畫布左下角的 y-坐標

  • urx -- 一個數值, 畫面右上角的 x-坐標

  • ury -- 一個數值, 畫布右上角的 y-坐標

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

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

>>>
>>> screen.reset()
>>> screen.setworldcoordinates(-50,-7.5,50,7.5)
>>> for _ in range(72):
...     left(10)
...
>>> for _ in range(8):
...     left(45); fd(2)   # 一個正八邊形

動畫控制?

turtle.delay(delay=None)?
參數:

delay -- 正整型數

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

可選參數:

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

  • delay -- 非負整型數

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

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

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

另參見 RawTurtle/Turtle 方法 speed()

使用屏幕事件?

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

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

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

  • key -- 一個字符串: 鍵 (例如 "a") 或鍵標 (例如 "space")

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

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

  • key -- 一個字符串: 鍵 (例如 "a") 或鍵標 (例如 "space")

綁定 fun 指定的函數到指定鍵的按下事件。如未指定鍵則綁定到任意鍵的按下事件。注: 為了能夠注冊按鍵事件,必須得到焦點。(參見 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)?
參數:
  • fun -- 一個函數,調用時將傳入兩個參數表示在畫布上點擊的坐標。

  • btn -- 鼠標按鈕編號,默認值為 1 (鼠標左鍵)

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

綁定 fun 指定的函數到鼠標點擊屏幕事件。如果 fun 值為 None,則移除現有的綁定。

以下示例使用一個 TurtleScreen 實例 screen 和一個 Turtle 實例 turtle:

>>>
>>> screen.onclick(turtle.goto) # 后續(xù)對 TurtleScreen 的點擊
>>>                             # 將使海龜移至被點擊的位置。
>>> screen.onclick(None)        # 再次移除事件綁定

備注

此 TurtleScreen 方法作為全局函數時只有一個名字 onscreenclick。全局函數 onclick 所對應的是 Turtle 方法 onclick

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

  • t -- 一個數值 >= 0

安裝一個計時器,在 t 毫秒后調用 fun 函數。

>>>
>>> running = True
>>> def f():
...     if running:
...         fd(50)
...         lt(60)
...         screen.ontimer(f, 250)
>>> f()   ### 讓海龜隨意前進
>>> running = False
turtle.mainloop()?
turtle.done()?

開始事件循環(huán) - 調用 Tkinter 的 mainloop 函數。必須作為一個海龜繪圖程序的結束語句。如果一個腳本是在以 -n 模式 (無子進程) 啟動的 IDLE 中運行時 不可 使用 - 用于實現海龜繪圖的交互功能。:

>>>
>>> screen.mainloop()

輸入方法?

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

  • prompt -- string

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

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

  • prompt -- string

  • default -- 數值 (可選)

  • minval -- 數值 (可選)

  • maxval -- 數值 (可選)

彈出一個用于輸入數值的對話框窗口。 title 是對話框窗口的標題,prompt 是通常用來描述要輸入的數字信息的文本。 default: 默認值, minval: 可輸入的最小值, maxval: 可輸入的最大值。 如果給出 minval .. maxval 則輸入的數值必須在此范圍以內。 如未給出,則將發(fā)出提示并且讓話框保持打開以便修正。 返回輸入的數值。 如果對話框被取消,則返回 None。

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

設置與特殊方法?

turtle.mode(mode=None)?
參數:

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

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

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

模式

初始海龜朝向

正數角度

"standard"

朝右 (東)

逆時針

"logo"

朝上 (北)

順時針

>>>
>>> mode("logo")   # 將海龜重置為朝向北方
>>> mode()
'logo'
turtle.colormode(cmode=None)?
參數:

cmode -- 數值 1.0 或 255 其中之一

返回 colormode 或將其設為 1.0 或 255。 后續(xù)表示三原色的 r, g, b 值必須在 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 對象。供了解 Tkinter 的 Canvas 對象內部機理的人士使用。

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

返回所有當前可用海龜形狀的列表。

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

調用此函數有三種不同方式:

  1. name 為一個 gif 文件的文件名, shapeNone: 安裝相應的圖像形狀。:

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

    備注

    當海龜轉向時圖像形狀 不會 轉動,因此無法顯示海龜的朝向!

  2. name 為指定的字符串,shape 為由坐標值對構成的元組: 安裝相應的多邊形形狀。

    >>>
    >>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3)))
    
  3. name 為任意字符串而 shape 為 (復合) Shape 對象:安裝相應的復合形狀。Install the corresponding compound shape.

將一個海龜形狀加入 TurtleScreen 的形狀列表。只有這樣注冊過的形狀才能通過執(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()?

關閉海龜繪圖窗口。

turtle.exitonclick()?

bye() 方法綁定到 Screen 上的鼠標點擊事件。

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

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

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

參數:
  • width -- 如為一個整型數值,表示大小為多少像素,如為一個浮點數值,則表示屏幕的占比;默認為屏幕的 50%

  • height -- 如為一個整型數值,表示高度為多少像素,如為一個浮點數值,則表示屏幕的占比;默認為屏幕的 75%

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

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

>>>
>>> screen.setup (width=200, height=200, startx=0, starty=0)
>>>              # 設置窗口為 200x200 像素,位于屏幕左上角
>>> screen.setup(width=.75, height=0.5, startx=None, starty=None)
>>>              # 設置窗口寬度為屏幕的 75% 高度為屏幕的 50% 并居中
turtle.title(titlestring)?
參數:

titlestring -- 一個字符串,顯示為海龜繪圖窗口的標題欄文本

設置海龜窗口標題為 titlestring 指定的文本。

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

公共類?

class turtle.RawTurtle(canvas)?
class turtle.RawPen( canvas )?
參數:

canvas -- 一個 tkinter.Canvas, ScrolledCanvasTurtleScreen

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

class turtle.Turtle?

RawTurtle 的子類,具有相同的接口,但其繪圖場所為默認的 Screen 類對象,在首次使用時自動創(chuàng)建。

class turtle.TurtleScreen(cv)?
參數:

cv -- 一個 tkinter.Canvas

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

class turtle.Screen?

TurtleScreen 的子類,增加了四個方法.

class turtle.ScrolledCanvas(master)?
參數:

master -- 可容納 ScrolledCanvas 的 Tkinter 部件,即添加了滾動條的 Tkinter-canvas

由 Screen 類使用,使其能夠自動提供一個 ScrolledCanvas 作為海龜的繪圖場所。

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

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

實現形狀的數據結構。(type_, data) 必須遵循以下定義:

type_

data

"polygon"

一個多邊形元組,即由坐標值對構成的元組

"image"

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

"compound"

None (復合形狀必須使用 addcomponent() 方法來構建)

addcomponent(poly, fill, outline=None)?
參數:
  • poly -- 一個多邊形,即由數值對構成的元組

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

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

示例:

>>>
>>> poly = ((0,0),(10,-5),(0,10),(-10,-5))
>>> s = Shape("compound")
>>> s.addcomponent(poly, "red", "blue")
>>> # ... 添加更多組件,然后使用 register_shape()

參見 復合形狀

class turtle.Vec2D(x, y)?

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

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

  • a + b 矢量加法

  • a - b 矢量減法

  • a * b 內積

  • k * aa * k 與標量相乘

  • abs(a) a 的絕對值

  • a.rotate(angle) 旋轉

說明?

海龜對象在屏幕對象上繪圖,在 turtle 的面向對象接口中有許多關鍵的類可被用于創(chuàng)建它們并將它們相互關聯。

Turtle 實例將自動創(chuàng)建一個 Screen 實例,如果它還未創(chuàng)建的話。

TurtleRawTurtle 的子類,它 不會 自動創(chuàng)建繪圖區(qū)域 —— 需要為其提供或創(chuàng)建一個 canvascanvas 可以是一個 tkinter.Canvas, ScrolledCanvas TurtleScreen。

TurtleScreen 是基本的海龜繪圖區(qū)域。 ScreenTurtleScreen 的子類,并包括 一些額外方法 用來管理其外觀(包括大小和標題)及行為。 TurtleScreen 的構造器需要一個 tkinter.CanvasScrolledCanvas 作為參數。

海龜繪圖形的函數式接口使用 TurtleTurtleScreen/Screen 的各種方法。 在下層,每當從 Screen 方法派生的函數被調用時就會自動創(chuàng)建一個屏幕對象。 同樣地,每當從 Turtle 方法派生的函數被調用時也都會自動創(chuàng)建一個 Turtle 對象。

要在一個屏幕中使用多個海龜,就必須使用面向對象的接口。

幫助與配置?

如何使用幫助?

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

  • 當使用 IDLE 時,輸入函數/方法調用將彈出工具提示顯示其簽名和文檔字符串的頭幾行。

  • 對文法或函數調用 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()
    
  • 方法對應函數的文檔字符串的形式會有一些修改:

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

這些修改版文檔字符串是在導入時與方法對應函數的定義一起自動生成的。

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

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

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

filename -- 一個字符串,表示文件名

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

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

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

在撰寫本文檔時已經有了德語和意大利語版的文檔字符串字典。(更多需求請聯系 glingl@aon.at)

如何配置 Screen 和 Turtle?

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

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

內置的配置對應了下面的 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

選定條目的簡短說明:

  • 開頭的四行對應了 Screen.setup 方法的參數。

  • 第 5 和第 6 行對應于 Screen.screensize 方法的參數。

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

  • 如果你想使用無填充色(即讓海龜變透明),則你必須寫 fillcolor = "" (但在but all nonempty strings must not have quotes in the cfg 文件中所有非空字符串都不可加引號)。

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

  • 例如當你設置了 language = italian 則文檔字符串字典 turtle_docstringdict_italian.py 將在導入時被加載(如果它存在于導入路徑,即與 turtle 相同的目錄中)。

  • exampleturtleexamplescreen 條目定義了相應對象在文檔字符串中顯示的名稱。方法文檔字符串轉換為函數文檔字符串時將從文檔字符串中刪去這些名稱。

  • using_IDLE: 如果你經常使用 IDLE 及其 -n 開關選項("無子進程")則將此項設為 True。 這將阻止 exitonclick() 進入主事件循環(huán)。

turtle.cfg 文件可以保存于 turtle 所在目錄,當前工作目錄也可以有一個同名文件。后者會重載覆蓋前者的設置。

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

turtledemo --- 演示腳本集?

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

python -m turtledemo

此外,你也可以單獨運行其中的演示腳本。例如,:

python -m turtledemo.bytedesign

turtledemo 包目錄中的內容:

  • 一個演示查看器 __main__.py,可用來查看腳本的源碼并即時運行。

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

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

演示腳本清單如下:

名稱

描述

相關特性

bytedesign

復雜的傳統海龜繪圖模式

tracer(), delay, update()

chaos

繪制 Verhulst 動態(tài)模型,演示通過計算機的運算可能會生成令人驚嘆的結果

世界坐標系

clock

繪制模擬時鐘顯示本機的當前時間

海龜作為表針, ontimer

colormixer

試驗 r, g, b 顏色模式

ondrag() 當鼠標拖動

forest

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

隨機化

fractalcurves

繪制 Hilbert & Koch 曲線

遞歸

lindenmayer

文化數學 (印度裝飾藝術)

L-系統

minimal_hanoi

漢諾塔

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

nim

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

海龜作為小棒,事件驅動 (鼠標, 鍵盤)

paint

超極簡主義繪畫程序

onclick() 當鼠標點擊

peace

初級技巧

海龜: 外觀與動畫

penrose

非周期性地使用風箏和飛鏢形狀鋪滿平面

stamp() 印章

planet_and_moon

模擬引力系統

復合開關, Vec2D

rosette

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

clone(), undo()

round_dance

兩兩相對并不斷旋轉舞蹈的海龜

復合形狀, clone shapesize, tilt, get_shapepoly, update

sorting_animate

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

簡單對齊, 隨機化

tree

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

clone() 克隆

two_canvases

簡單設計

兩塊畫布上的海龜

yinyang

另一個初級示例

circle() 畫圓

祝你玩得開心!

Python 2.6 之后的變化?

  • Turtle.tracer, Turtle.window_width Turtle.window_height 等方法已被去除。 具有這些名稱和功能的方法現在只限于作為 Screen 的方法。 自這些方法派生的函數仍保持可用。 (實際上在 Python 2.6 中這些方法就已經只是對應 TurtleScreen/Screen 方法的副本了。)

  • Turtle.fill() 方法已被去除。 begin_fill()end_fill() 的行為則有細微改變:現在每個填充過程必須以一個 end_fill() 調用來結束。

  • 增加了一個 Turtle.filling 方法。 該方法返回一個布爾值:如果填充過程正在運行則為 True,否則為 False 。 此行為對應于 Python 2.6 中一個不帶參數的 fill() 調用。

Python 3.0 之后的變化?

  • 增加了 Turtle 方法 shearfactor() , shapetransform()get_shapepoly()。 這樣就可以使用所有的常規(guī)線性變換來改變海龜形狀。 tiltangle() 的功能已得到加強:現在它可以被用來獲取或設置傾斜角度。

  • 增加了 Screen 方法 onkeypress() 作為 onkey() 的補充。 當后者將動作綁定到松開按鍵事件時,還將為它添加一個別名: onkeyrelease()

  • 增加了 Screen.mainloop 方法,這樣在操作 ScreenTurtle 對象時就無需再使用單獨的 mainloop() 函數。

  • 增加了兩個輸入方法: Screen.textinputScreen.numinput。 這兩個方法會彈出輸入對話框接受輸入并分別返回字符串和數字。 These pop up input dialogs and return strings and numbers respectively.

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


1 人點贊