turtle — 海龜繪圖

原始碼: Lib/turtle.py


簡介

海龜繪圖是 Logo 中引入的流行幾何繪圖工具 的一種實現,由 Wally Feurzeig、Seymour Papert 和 Cynthia Solomon 於 1967 年開發。

開始使用

想象一下一個機器海龜從 x-y 平面上的 (0, 0) 開始。在 import turtle 之後,給它命令 turtle.forward(15),它會在螢幕上沿其面向的方向移動 15 個畫素,並在移動時繪製一條線。給它命令 turtle.right(25),它會在原地順時針旋轉 25 度。

在 Python 中,海龜繪圖提供了物理“海龜”(一個帶有畫筆的小機器人)的表示,該海龜在地面上的一張紙上繪圖。

這是一種有效且經過驗證的方法,供學習者接觸程式設計概念並與軟體進行互動,因為它提供了即時、可見的反饋。它還提供了對圖形輸出的便捷訪問。

海龜繪圖最初是作為一種教育工具建立的,供教師在課堂上使用。對於需要生成一些圖形輸出的程式設計師來說,這可能是一種在不增加將更復雜或外部庫引入其工作的情況下執行此操作的方法。

教程

新使用者應該從這裡開始。在本教程中,我們將探索一些海龜繪圖的基礎知識。

啟動海龜環境

在 Python shell 中,匯入 turtle 模組的所有物件

from turtle import *

如果您遇到 No module named '_tkinter' 錯誤,您需要在系統上安裝 Tk 介面

基本繪圖

讓海龜向前移動 100 步

forward(100)

您應該看到(很可能在顯示器上的新視窗中)海龜繪製的一條線,向東移動。更改海龜的方向,使其向左(逆時針)旋轉 120 度

left(120)

讓我們繼續繪製一個三角形

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

請注意,當您引導它時,由箭頭表示的海龜會指向不同的方向。

嘗試使用這些命令,以及 backward()right()

畫筆控制

嘗試更改顏色 - 例如,color('blue') - 和線條的寬度 - 例如,width(3) - 然後再次繪製。

您還可以透過抬起筆來移動海龜而不進行繪製:在移動之前使用 up()。要再次開始繪製,請使用 down()

海龜的位置

將您的海龜送回其起點(如果它已從螢幕上消失,則很有用)

home()

起始位置位於海龜螢幕的中心。如果您需要知道它們,請使用以下命令獲取海龜的 x-y 座標

pos()

起始位置為 (0, 0)

過一段時間後,清除視窗可能會有所幫助,以便我們可以重新開始

clearscreen()

製作演算法圖案

使用迴圈,可以構建幾何圖案

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

接下來,我們將建立一個迴圈

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

abs(pos()) < 1 是知道海龜何時回到其起始位置的好方法。

最後,完成填充

end_fill()

(請注意,只有在您發出 end_fill() 命令時,才會真正進行填充。)

如何…

本節介紹一些典型的海龜用例和方法。

儘可能快速上手

海龜繪圖的樂趣之一是簡單命令可以提供的即時、視覺反饋 - 這是向孩子們介紹程式設計思想的絕佳方法,開銷最小(當然,不僅限於兒童)。

海龜模組透過將其所有基本功能公開為函式來實現這一點,這些函式可以透過 from turtle import * 使用。海龜繪圖教程 介紹了這種方法。

值得注意的是,許多海龜命令也有更簡潔的等效命令,例如 forward()fd()。當與打字不是一種技能的學習者一起工作時,這些尤其有用。

您需要在系統上安裝 Tk 介面 ,以便海龜繪圖正常工作。請注意,這並非總是簡單明瞭的,因此如果您計劃與學習者一起使用海龜繪圖,請提前檢查。

使用 turtle 模組名稱空間

使用 from turtle import * 很方便 - 但請注意,它會匯入大量物件,如果你不只是進行海龜繪圖,你可能會遇到名稱衝突的風險(如果你在可能匯入其他模組的指令碼中使用海龜繪圖,這個問題會更加突出)。

解決方案是使用 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 也會關閉海龜的視窗。在指令碼末尾新增

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.screenScreen 的例項,一個 Turtle 例項存在於其上;它是與海龜一起自動建立的。

海龜的螢幕可以自定義,例如

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

海龜繪圖參考

注意

在以下文件中,給出了函式的引數列表。當然,方法還有額外的第一個引數 self,這裡省略了。

海龜方法

海龜運動
移動和繪製
獲取海龜的狀態
設定和測量
畫筆控制
繪圖狀態
顏色控制
填充
更多繪圖控制
海龜狀態
可見性
外觀
使用事件
特殊的海龜方法

TurtleScreen/Screen 的方法

視窗控制
動畫控制
使用螢幕事件
設定和特殊方法
輸入方法
Screen 特有的方法

RawTurtle/Turtle 的方法和相應的函式

本節中的大多數示例都引用一個名為 turtle 的 Turtle 例項。

海龜運動

turtle.forward(distance)
turtle.fd(distance)
引數:

distance – 一個數字(整數或浮點數)

讓海龜沿著當前朝向的方向移動指定的 distance

>>> turtle.position()
(0.00,0.00)
>>> turtle.forward(25)
>>> turtle.position()
(25.00,0.00)
>>> turtle.forward(-75)
>>> turtle.position()
(-50.00,0.00)
turtle.back(distance)
turtle.bk(distance)
turtle.backward(distance)
引數:

distance – 一個數字

讓海龜向後移動 distance,與海龜當前朝向相反的方向。不改變海龜的朝向。

>>> turtle.position()
(0.00,0.00)
>>> turtle.backward(30)
>>> turtle.position()
(-30.00,0.00)
turtle.right(angle)
turtle.rt(angle)
引數:

angle – 一個數字(整數或浮點數)

讓海龜向右轉動 angle 個單位。(單位預設為度,但可以透過 degrees()radians() 函式設定。)角度方向取決於海龜模式,請參見 mode()

>>> turtle.heading()
22.0
>>> turtle.right(45)
>>> turtle.heading()
337.0
turtle.left(angle)
turtle.lt(angle)
引數:

angle – 一個數字(整數或浮點數)

將海龜向左轉動 angle 個單位。(單位預設為度,但可以透過 degrees()radians() 函式進行設定。)角度方向取決於海龜模式,請參閱 mode()

>>> turtle.heading()
22.0
>>> turtle.left(45)
>>> turtle.heading()
67.0
turtle.goto(x, y=None)
turtle.setpos(x, y=None)
turtle.setposition(x, y=None)
引數:
  • x – 一個數字或一對/一組數字

  • y – 一個數字或 None

如果 yNone,則 x 必須是一對座標或一個 Vec2D(例如,由 pos() 返回)。

將海龜移動到絕對位置。如果筆是落下的,則繪製線條。不改變海龜的方向。

>>> tp = turtle.pos()
>>> tp
(0.00,0.00)
>>> turtle.setpos(60,30)
>>> turtle.pos()
(60.00,30.00)
>>> turtle.setpos((20,80))
>>> turtle.pos()
(20.00,80.00)
>>> turtle.setpos(tp)
>>> turtle.pos()
(0.00,0.00)
turtle.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)

在 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)  # draw a semicircle
>>> turtle.position()
(0.00,240.00)
>>> turtle.heading()
180.0
turtle.dot(size=None, *color)
引數:
  • size – 一個整數 >= 1(如果給出)

  • color – 一個顏色字串或數字顏色元組

使用 color 繪製一個直徑為 size 的圓形點。如果未給出 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()

(重複)撤消最後一個海龜操作。可用的撤消運算元由撤消緩衝區的大小決定。

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

speed – 範圍 0..10 內的整數或速度字串(見下文)

將海龜的速度設定為 0..10 範圍內的整數值。如果未給出任何引數,則返回當前速度。

如果輸入是大於 10 或小於 0.5 的數字,則速度設定為 0。速度字串會對映到如下速度值:

  • “fastest”: 0

  • “fast”: 10

  • “normal”: 6

  • “slow”: 3

  • “slowest”: 1

速度從 1 到 10 會強制執行越來越快的線條繪製和海龜轉動動畫。

注意:speed = 0 表示 進行動畫。forward/back 使海龜跳躍,同樣 left/right 使海龜立即轉動。

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

告知海龜的狀態

turtle.position()
turtle.pos()

返回海龜的當前位置 (x,y)(作為 Vec2D 向量)。

>>> turtle.pos()
(440.00,-0.00)
turtle.towards(x, y=None)
引數:
  • x – 一個數字或一對/一組數字或一個海龜例項

  • y – 如果 x 是一個數字,則為數字,否則為 None

返回海龜位置到 (x,y) 指定的位置、向量或另一隻海龜之間的線條的角度。這取決於海龜的起始方向,而起始方向取決於模式 - “standard”/”world” 或 “logo”。

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

返回海龜的 x 座標。

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

返回海龜的 y 座標。

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

返回海龜當前的朝向(值取決於海龜模式,請參閱 mode())。

>>> turtle.home()
>>> turtle.left(67)
>>> turtle.heading()
67.0
turtle.distance(x, y=None)
引數:
  • x – 一個數字或一對/一組數字或一個海龜例項

  • y – 如果 x 是一個數字,則為數字,否則為 None

返回海龜到 (x,y) 的距離,給定向量,或者給定另一個海龜,以海龜步長單位計算。

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

測量設定

turtle.degrees(fullcircle=360.0)
引數:

fullcircle – 一個數字

設定角度測量單位,即設定一個完整圓的“度數”。預設值為 360 度。

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

Change angle measurement unit to grad (also known as gon,
grade, or gradian and equals 1/100-th of the right angle.)
>>> turtle.degrees(400.0)
>>> turtle.heading()
100.0
>>> turtle.degrees(360)
>>> turtle.heading()
90.0
turtle.radians()

將角度測量單位設定為弧度。等同於 degrees(2*math.pi)

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

畫筆控制

繪圖狀態

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

放下畫筆 - 移動時繪製。

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

抬起畫筆 - 移動時不繪製。

turtle.pensize(width=None)
turtle.width(width=None)
引數:

width – 一個正數

將線條粗細設定為 *width* 或返回它。如果 resizemode 設定為“auto”並且 turtleshape 是一個多邊形,則該多邊形將以相同的線條粗細繪製。如果沒有給出引數,則返回當前畫筆大小。

>>> turtle.pensize()
1
>>> turtle.pensize(10)   # from here on lines of width 10 are drawn
turtle.pen(pen=None, **pendict)
引數:
  • pen – 一個字典,包含下面列出的部分或全部鍵

  • pendict – 一個或多個關鍵字引數,其關鍵字是下面列出的鍵

返回或設定畫筆的屬性,採用“畫筆字典”形式,具有以下鍵/值對

  • “shown”: True/False

  • “pendown”: True/False

  • “pencolor”: 顏色字串或顏色元組

  • “fillcolor”: 顏色字串或顏色元組

  • “pensize”: 正數

  • “speed”: 0..10 範圍內的數字

  • “resizemode”: “auto”、“user” 或 “noresize”

  • “stretchfactor”: (正數,正數)

  • “outline”: 正數

  • “tilt”: 數字

此字典可以用作後續呼叫 pen() 的引數,以恢復以前的畫筆狀態。此外,還可以提供一個或多個這些屬性作為關鍵字引數。這可用於在一個語句中設定多個畫筆屬性。

>>> turtle.pen(fillcolor="black", pencolor="red", pensize=10)
>>> sorted(turtle.pen().items())
[('fillcolor', 'black'), ('outline', 1), ('pencolor', 'red'),
 ('pendown', True), ('pensize', 10), ('resizemode', 'noresize'),
 ('shearfactor', 0.0), ('shown', True), ('speed', 9),
 ('stretchfactor', (1.0, 1.0)), ('tilt', 0.0)]
>>> penstate=turtle.pen()
>>> turtle.color("yellow", "")
>>> turtle.penup()
>>> sorted(turtle.pen().items())[:3]
[('fillcolor', ''), ('outline', 1), ('pencolor', 'yellow')]
>>> turtle.pen(penstate, fillcolor="green")
>>> sorted(turtle.pen().items())[:3]
[('fillcolor', 'green'), ('outline', 1), ('pencolor', 'red')]
turtle.isdown()

如果畫筆已放下,則返回 True,如果已抬起,則返回 False

>>> turtle.penup()
>>> turtle.isdown()
False
>>> turtle.pendown()
>>> turtle.isdown()
True

顏色控制

turtle.pencolor(*args)

返回或設定畫筆顏色。

允許四種輸入格式

pencolor()

返回當前畫筆顏色,作為顏色規範字符串或元組(請參見示例)。可以用作另一個 color/pencolor/fillcolor 呼叫的輸入。

pencolor(colorstring)

將畫筆顏色設定為 *colorstring*,它是一個 Tk 顏色規範字符串,例如 "red""yellow""#33cc8c"

pencolor((r, g, b))

將畫筆顏色設定為由 *r*、*g* 和 *b* 元組表示的 RGB 顏色。*r*、*g* 和 *b* 中的每一個都必須在 0..colormode 範圍內,其中 colormode 為 1.0 或 255 (參見 colormode())。

pencolor(r, g, b)

將畫筆顏色設定為由 *r*、*g* 和 *b* 表示的 RGB 顏色。*r*、*g* 和 *b* 中的每一個都必須在 0..colormode 範圍內。

如果 turtleshape 是一個多邊形,則該多邊形的輪廓將使用新設定的畫筆顏色繪製。

>>> colormode()
1.0
>>> turtle.pencolor()
'red'
>>> turtle.pencolor("brown")
>>> turtle.pencolor()
'brown'
>>> tup = (0.2, 0.8, 0.55)
>>> turtle.pencolor(tup)
>>> turtle.pencolor()
(0.2, 0.8, 0.5490196078431373)
>>> colormode(255)
>>> turtle.pencolor()
(51.0, 204.0, 140.0)
>>> turtle.pencolor('#32c18f')
>>> turtle.pencolor()
(50.0, 193.0, 143.0)
turtle.fillcolor(*args)

返回或設定填充顏色。

允許四種輸入格式

fillcolor()

返回當前填充顏色,作為顏色規範字符串,可能採用元組格式(請參見示例)。可以用作另一個 color/pencolor/fillcolor 呼叫的輸入。

fillcolor(colorstring)

將填充顏色設定為 *colorstring*,它是一個 Tk 顏色規範字符串,例如 "red""yellow""#33cc8c"

fillcolor((r, g, b))

將填充顏色設定為由 *r*、*g* 和 *b* 元組表示的 RGB 顏色。*r*、*g* 和 *b* 中的每一個都必須在 0..colormode 範圍內,其中 colormode 為 1.0 或 255 (參見 colormode())。

fillcolor(r, g, b)

將填充顏色設定為由 *r*、*g* 和 *b* 表示的 RGB 顏色。*r*、*g* 和 *b* 中的每一個都必須在 0..colormode 範圍內。

如果 turtleshape 是一個多邊形,則該多邊形的內部將使用新設定的填充顏色繪製。

>>> turtle.fillcolor("violet")
>>> turtle.fillcolor()
'violet'
>>> turtle.pencolor()
(50.0, 193.0, 143.0)
>>> turtle.fillcolor((50, 193, 143))  # Integers, not floats
>>> turtle.fillcolor()
(50.0, 193.0, 143.0)
>>> turtle.fillcolor('#ffffff')
>>> turtle.fillcolor()
(255.0, 255.0, 255.0)
turtle.color(*args)

返回或設定畫筆顏色和填充顏色。

允許幾種輸入格式。它們使用 0 到 3 個引數,如下所示

color()

返回當前畫筆顏色和當前填充顏色,作為由 pencolor()fillcolor() 返回的顏色規範字符串或元組對。

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

輸入方式與 pencolor() 相同,將填充顏色和畫筆顏色都設定為給定值。

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

等效於 pencolor(colorstring1)fillcolor(colorstring2),如果使用其他輸入格式,則類似。

如果 turtleshape 是一個多邊形,則該多邊形的輪廓和內部將使用新設定的顏色繪製。

>>> turtle.color("red", "green")
>>> turtle.color()
('red', 'green')
>>> color("#285078", "#a0c8f0")
>>> color()
((40.0, 80.0, 120.0), (160.0, 200.0, 240.0))

另請參閱:Screen 方法 colormode()

填充

turtle.filling()

返回填充狀態(如果正在填充,則為 True,否則為 False)。

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

在繪製要填充的形狀之前呼叫。

turtle.end_fill()

填充在上次呼叫 begin_fill() 後繪製的形狀。

對於自相交的多邊形或多個形狀,重疊區域是否填充取決於作業系統的圖形、重疊型別和重疊數量。例如,上面的海龜星形可以是全部黃色,也可以有一些白色區域。

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

更多繪圖控制

turtle.reset()

刪除螢幕上海龜的繪圖,重新將海龜居中並將變數設定為預設值。

>>> turtle.goto(0,-22)
>>> turtle.left(100)
>>> turtle.position()
(0.00,-22.00)
>>> turtle.heading()
100.0
>>> turtle.reset()
>>> turtle.position()
(0.00,0.00)
>>> turtle.heading()
0.0
turtle.clear()

刪除螢幕上海龜的繪圖。不要移動海龜。海龜的狀態和位置以及其他海龜的繪圖不受影響。

turtle.write(arg, move=False, align='left', font=('Arial', 8, 'normal'))
引數:
  • arg – 要寫入 TurtleScreen 的物件

  • move – True/False

  • align – 字串“left”、“center”或“right”之一

  • font – 三元組 (字型名稱、字型大小、字型型別)

根據給定的字型,按照*align*(“left”、“center”或“right”)在當前海龜位置寫入文字 - *arg* 的字串表示形式。如果 *move* 為 true,則筆會移動到文字的右下角。預設情況下,*move* 為 False

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

海龜狀態

可見性

turtle.hideturtle()
turtle.ht()

使海龜不可見。在進行一些複雜的繪圖時,這樣做是個好主意,因為隱藏海龜會顯著加快繪圖速度。

>>> turtle.hideturtle()
turtle.showturtle()
turtle.st()

使海龜可見。

>>> turtle.showturtle()
turtle.isvisible()

如果海龜顯示為 True,如果海龜隱藏為 False,則返回。

>>> turtle.hideturtle()
>>> turtle.isvisible()
False
>>> turtle.showturtle()
>>> turtle.isvisible()
True

外觀

turtle.shape(name=None)
引數:

name – 一個有效的形狀名稱字串

將海龜形狀設定為具有給定 *name* 的形狀,或者,如果未給出名稱,則返回當前形狀的名稱。具有 *name* 的形狀必須存在於 TurtleScreen 的形狀字典中。最初有以下多邊形形狀:“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”之一

將 resizemode 設定為以下值之一:“auto”、“user”、“noresize”。如果未給出 *rmode*,則返回當前 resizemode。不同的 resizemode 具有以下效果

  • “auto”:根據筆大小的值調整海龜的外觀。

  • “user”:根據拉伸因子和輪廓線寬度(輪廓)的值調整海龜的外觀,這些值由 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 拉伸因子和/或輪廓。將 resizemode 設定為“user”。當且僅當 resizemode 設定為“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 – 數字(可選)

設定或返回當前剪下因子。根據給定的剪下因子 *shear* 剪下海龜形狀,該剪下因子是剪下角的正切值。 更改海龜的航向(移動方向)。如果未給出 *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* 指定的方向,而不管其當前的傾斜角度如何。 更改海龜的航向(移動方向)。如果未給出角度:返回當前傾斜角度,即海龜形狀的方向與海龜航向(其移動方向)之間的角度。

>>> turtle.reset()
>>> turtle.shape("circle")
>>> turtle.shapesize(5,2)
>>> turtle.tilt(45)
>>> turtle.tiltangle()
45.0
turtle.shapetransform(t11=None, t12=None, t21=None, t22=None)
引數:
  • t11 – 數字(可選)

  • t12 – 數字(可選)

  • t21 – 數字(可選)

  • t12 – 數字(可選)

設定或返回海龜形狀的當前變換矩陣。

如果未給出任何矩陣元素,則返回由 4 個元素組成的元組形式的變換矩陣。否則,設定給定的元素並根據由第一行 t11、t12 和第二行 t21、t22 組成的矩陣轉換海龜形狀。行列式 t11 * t22 - t12 * t21 不得為零,否則會引發錯誤。根據給定的矩陣修改拉伸因子、剪下因子和傾斜角度。

>>> turtle = Turtle()
>>> turtle.shape("square")
>>> turtle.shapesize(4,2)
>>> turtle.shearfactor(-0.5)
>>> turtle.shapetransform()
(4.0, -1.0, -0.0, 2.0)
turtle.get_shapepoly()

以座標對的元組形式返回當前形狀多邊形。這可用於定義新形狀或複合形狀的組成部分。

>>> turtle.shape("square")
>>> turtle.shapetransform(4, -1, 0, 2)
>>> turtle.get_shapepoly()
((50, -20), (30, 20), (-50, 20), (-30, -20))

使用事件

turtle.onclick(fun, btn=1, add=None)
引數:
  • fun – 具有兩個引數的函式,它將使用畫布上單擊點的座標來呼叫

  • btn – 滑鼠按鈕的編號,預設為 1(滑鼠左鍵)

  • addTrueFalse – 如果為 True,將新增一個新繫結,否則將替換以前的繫結

將 *fun* 繫結到此海龜的滑鼠單擊事件。如果 *fun* 為 None,則刪除現有繫結。匿名海龜的示例,即過程方式

>>> def turn(x, y):
...     left(180)
...
>>> onclick(turn)  # Now clicking into the turtle will turn it.
>>> onclick(None)  # event-binding will be removed
turtle.onrelease(fun, btn=1, add=None)
引數:
  • fun – 具有兩個引數的函式,它將使用畫布上單擊點的座標來呼叫

  • btn – 滑鼠按鈕的編號,預設為 1(滑鼠左鍵)

  • addTrueFalse – 如果為 True,將新增一個新繫結,否則將替換以前的繫結

fun繫結到此海龜上的滑鼠按鍵釋放事件。如果funNone,則刪除現有繫結。

>>> class MyTurtle(Turtle):
...     def glow(self,x,y):
...         self.fillcolor("red")
...     def unglow(self,x,y):
...         self.fillcolor("")
...
>>> turtle = MyTurtle()
>>> turtle.onclick(turtle.glow)     # clicking on turtle turns fillcolor red,
>>> turtle.onrelease(turtle.unglow) # releasing turns it to transparent.
turtle.ondrag(fun, btn=1, add=None)
引數:
  • fun – 具有兩個引數的函式,它將使用畫布上單擊點的座標來呼叫

  • btn – 滑鼠按鈕的編號,預設為 1(滑鼠左鍵)

  • addTrueFalse – 如果為 True,將新增一個新繫結,否則將替換以前的繫結

fun繫結到此海龜上的滑鼠移動事件。如果funNone,則刪除現有繫結。

備註:海龜上的每個滑鼠移動事件序列都以該海龜上的滑鼠點選事件開頭。

>>> turtle.ondrag(turtle.goto)

隨後,點選並拖動海龜將使其在螢幕上移動,從而產生手繪(如果筆已放下)。

特殊海龜方法

turtle.begin_poly()

開始記錄多邊形的頂點。當前海龜位置是多邊形的第一個頂點。

turtle.end_poly()

停止記錄多邊形的頂點。當前海龜位置是多邊形的最後一個頂點。這將與第一個頂點相連。

turtle.get_poly()

返回最後記錄的多邊形。

>>> turtle.home()
>>> turtle.begin_poly()
>>> turtle.fd(100)
>>> turtle.left(20)
>>> turtle.fd(30)
>>> turtle.left(60)
>>> turtle.fd(50)
>>> turtle.end_poly()
>>> p = turtle.get_poly()
>>> register_shape("myFavouriteShape", p)
turtle.clone()

建立並返回一個海龜的克隆,具有相同的位置、朝向和海龜屬性。

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

返回海龜物件本身。唯一合理的用法:作為返回“匿名海龜”的函式

>>> pet = getturtle()
>>> pet.fd(50)
>>> pet
<turtle.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

設定或停用撤消緩衝區。如果size是一個整數,則安裝一個給定大小的空撤消緩衝區。size給出了可以透過undo()方法/函式撤消的最大海龜運算元。如果sizeNone,則停用撤消緩衝區。

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

返回撤消緩衝區中的條目數。

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

複合形狀

要使用由多個不同顏色的多邊形組成的複合海龜形狀,您必須顯式使用輔助類Shape,如下所述

  1. 建立一個型別為“compound”的空Shape物件。

  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. 現在將形狀新增到螢幕的形狀列表並使用它

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

注意

Shape類在內部以不同的方式被register_shape()方法使用。應用程式程式設計師只有在使用如上所示的複合形狀時才需要處理Shape類!

TurtleScreen/Screen的方法和相應的函式

本節中的大多數示例都引用一個名為screen的TurtleScreen例項。

視窗控制

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是另一個從海龜方法clear派生的函式。

turtle.clearscreen()

從TurtleScreen刪除所有繪圖和所有海龜。將現在為空的TurtleScreen重置為其初始狀態:白色背景,無背景影像,無事件繫結並啟用跟蹤。

turtle.reset()

注意

此TurtleScreen方法僅在全域性函式下以名稱resetscreen可用。全域性函式reset是另一個從海龜方法reset派生的函式。

turtle.resetscreen()

將螢幕上的所有海龜重置為其初始狀態。

turtle.screensize(canvwidth=None, canvheight=None, bg=None)
引數:
  • canvwidth – 正整數,畫布的新寬度(以畫素為單位)

  • canvheight – 正整數,畫布的新高度(以畫素為單位)

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

如果沒有給出任何引數,則返回當前(畫布寬度,畫布高度)。否則,調整海龜在其上繪圖的畫布的大小。不要更改繪圖視窗。要觀察畫布的隱藏部分,請使用捲軸。使用此方法,可以使先前在畫布之外的繪圖部分可見。

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

設定使用者自定義座標系,如有必要,切換到“世界”模式。這將執行 screen.reset()。如果“世界”模式已啟用,則所有繪圖將根據新座標重新繪製。

注意:在使用者自定義座標系中,角度可能會出現失真。

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

動畫控制

turtle.delay(delay=None)
引數:

delay – 正整數

設定或返回以毫秒為單位的繪圖延遲。(這大約是兩個連續畫布更新之間的時間間隔。)繪圖延遲越長,動畫速度越慢。

可選引數

>>> screen.delay()
10
>>> screen.delay(5)
>>> screen.delay()
5
turtle.tracer(n=None, delay=None)
引數:
  • n – 非負整數

  • delay – 非負整數

開啟/關閉海龜動畫,並設定更新繪圖的延遲。如果給出了 n,則只實際執行每 n 次的常規螢幕更新。(可用於加速複雜圖形的繪製。)在不帶引數呼叫時,返回當前儲存的 n 值。第二個引數設定延遲值(請參見 delay())。

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

執行 TurtleScreen 更新。在關閉跟蹤器時使用。

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

使用螢幕事件

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

將焦點設定在 TurtleScreen 上(以便收集按鍵事件)。提供虛擬引數是為了能夠將 listen() 傳遞給 onclick 方法。

turtle.onkey(fun, key)
turtle.onkeyrelease(fun, key)
引數:
  • fun – 無引數的函式或 None

  • key – 字串:鍵(例如“a”)或鍵符號(例如“space”)

fun 繫結到鍵的按鍵釋放事件。如果 funNone,則刪除事件繫結。注意:為了能夠註冊按鍵事件,TurtleScreen 必須具有焦點。(參見方法 listen()。)

>>> def f():
...     fd(50)
...     lt(60)
...
>>> screen.onkey(f, "Up")
>>> screen.listen()
turtle.onkeypress(fun, key=None)
引數:
  • fun – 無引數的函式或 None

  • key – 字串:鍵(例如“a”)或鍵符號(例如“space”)

如果給出了 key,則將 fun 繫結到 key 的按鍵按下事件,如果沒有給出 key,則繫結到任何按鍵按下事件。注意:為了能夠註冊按鍵事件,TurtleScreen 必須具有焦點。(參見方法 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(滑鼠左鍵)

  • addTrueFalse – 如果為 True,將新增一個新繫結,否則將替換以前的繫結

fun 繫結到此螢幕上的滑鼠點選事件。如果 funNone,則刪除現有繫結。

名為 screen 的 TurtleScreen 例項和名為 turtle 的 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 方法僅以全域性函式的形式使用,名稱為 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()   ### makes the turtle march around
>>> running = False
turtle.mainloop()
turtle.done()

啟動事件迴圈 - 呼叫 Tkinter 的 mainloop 函式。必須是海龜圖形程式中的最後一條語句。如果指令碼是從 IDLE 以 -n 模式(無子程序)執行的,則不能使用 - 用於互動式使用海龜圖形。

>>> screen.mainloop()

輸入方法

turtle.textinput(title, prompt)
引數:
  • title – 字串

  • prompt – 字串

彈出一個對話方塊視窗,用於輸入字串。引數 title 是對話方塊視窗的標題,prompt 是一個文字,主要描述要輸入的資訊。返回輸入的字串。如果取消對話方塊,則返回 None

>>> screen.textinput("NIM", "Name of first player:")
turtle.numinput(title, prompt, default=None, minval=None, maxval=None)
引數:
  • title – 字串

  • prompt – 字串

  • default – 數字(可選)

  • minval – 數字(可選)

  • maxval – 數字(可選)

彈出一個對話方塊視窗,用於輸入數字。title 是對話方塊視窗的標題,prompt 是一個文字,主要描述要輸入的數值資訊。default:預設值,minval:輸入的最小值,maxval:輸入的最大值。如果給出了這些值,則輸入的數字必須在 minval .. maxval 範圍內。如果不是,則會發出提示,對話方塊將保持開啟狀態以進行更正。返回輸入的數字。如果取消對話方塊,則返回 None

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

設定和特殊方法

turtle.mode(mode=None)
引數:

mode – 字串 “standard”、“logo” 或 “world” 之一

設定海龜模式 (“standard”, “logo” 或 “world”) 並執行重置。如果未提供 mode,則返回當前模式。

“standard” 模式與舊版 turtle 相容。“logo” 模式與大多數 Logo 海龜圖形相容。“world” 模式使用使用者定義的“世界座標”。注意:在此模式下,如果 x/y 單位比率不等於 1,則角度會失真。

模式

海龜的初始朝向

正角度

“standard”

向右 (東)

逆時針

“logo”

向上 (北)

順時針

>>> mode("logo")   # resets turtle heading to north
>>> mode()
'logo'
turtle.colormode(cmode=None)
引數:

cmode – 值 1.0 或 255 之一

返回顏色模式或將其設定為 1.0 或 255。隨後,顏色三元組的 *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 的畫布。對了解如何使用 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 物件:安裝相應的複合形狀。

將海龜形狀新增到 TurtleScreen 的形狀列表。只有這樣註冊的形狀才能透過發出命令 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() 方法繫結到螢幕上的滑鼠單擊事件。

如果配置字典中的值 “using_IDLE” 為 False(預設值),則也進入主迴圈。注意:如果使用帶有 -n 開關(無子程序)的 IDLE,則應在 turtle.cfg 中將此值設定為 True。在這種情況下,IDLE 自己的主迴圈也對客戶端指令碼有效。

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)
>>>              # 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)
引數:

titlestring – 在海龜圖形視窗的標題欄中顯示的字串

將海龜視窗的標題設定為 *titlestring*。

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

公共類

class turtle.RawTurtle(canvas)
class turtle.RawPen(canvas)
引數:

canvas – 一個 tkinter.Canvas, 一個 ScrolledCanvas 或一個 TurtleScreen

建立一個海龜。海龜具有上述描述的所有 “海龜/RawTurtle 的方法”。

class turtle.Turtle

RawTurtle 的子類,具有相同的介面,但在首次需要時自動建立的預設 Screen 物件上繪製。

class turtle.TurtleScreen(cv)
引數:

cv – 一個 tkinter.Canvas

提供螢幕導向的方法,如上面描述的 bgcolor() 等。

class turtle.Screen

TurtleScreen 的子類,添加了 四個方法

class turtle.ScrolledCanvas(master)
引數:

master – 一些包含 ScrolledCanvas 的 Tkinter 小部件,即添加了捲軸的 Tkinter 畫布

由 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 – 一個多邊形,即一個數字對的元組

  • fillpoly 將要填充的顏色

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

請參見 複合形狀

class turtle.Vec2D(x, y)

一個二維向量類,用作實現海龜圖形的輔助類。 對於海龜圖形程式也可能有用。 從元組派生,所以向量是一個元組!

提供(對於ab 向量,k 數字)

  • a + b 向量加法

  • a - b 向量減法

  • a * b 內積

  • k * aa * k 與標量的乘法

  • abs(a) a 的絕對值

  • a.rotate(angle) 旋轉

說明

一個海龜物件在螢幕物件上繪製,並且海龜面向物件的介面中有許多關鍵類可以用來建立它們並將它們相互關聯。

如果不存在 Screen 例項,Turtle 例項將自動建立一個。

TurtleRawTurtle 的子類,它不會自動建立繪圖表面 - 需要為其提供或建立畫布畫布可以是 tkinter.CanvasScrolledCanvasTurtleScreen

TurtleScreen 是海龜的基本繪圖表面。ScreenTurtleScreen 的子類,並且包括一些額外的管理其外觀(包括大小和標題)和行為的方法TurtleScreen 的建構函式需要 tkinter.CanvasScrolledCanvas 作為引數。

海龜圖形的功能介面使用 TurtleTurtleScreen/ Screen 的各種方法。在幕後,每當呼叫派生自 Screen 方法的函式時,都會自動建立一個螢幕物件。 類似地,每當呼叫任何派生自 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()
    

這些修改後的文件字串與匯入時從方法派生的函式定義一起自動建立。

將文件字串翻譯成不同的語言

有一個實用程式可以建立一個字典,其鍵是方法名稱,值是 Screen 和 Turtle 類的公共方法的文件字串。

turtle.write_docstringdict(filename='turtle_docstringdict')
引數:

filename – 一個字串,用作檔名

建立並將文件字串字典寫入具有給定檔名的 Python 指令碼。此函式必須顯式呼叫(海龜圖形類不使用它)。文件字串字典將被寫入 Python 指令碼 filename.py。它旨在用作將文件字串翻譯成不同語言的模板。

如果您(或您的學生)想用您母語的線上幫助使用 turtle,您必須翻譯文件字串並將生成的檔案另存為例如 turtle_docstringdict_german.py

如果您的 turtle.cfg 檔案中有相應的條目,則此字典將在匯入時被讀取並替換原始的英文文件字串。

在撰寫本文時,有德語和義大利語的文件字串字典。(請將請求傳送至 glingl@aon.at。)

如何配置螢幕和海龜

內建的預設配置模仿舊海龜模組的外觀和行為,以便儘可能保持與它的相容性。

如果您想使用更好的反映此模組功能的其他配置,或者更適合您需求的配置,例如在教室中使用,您可以準備一個配置檔案 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 可以是任何內建的形狀,例如:箭頭、海龜等。有關更多資訊,請嘗試 help(shape)

  • 如果要使用無填充顏色(即讓海龜透明),則必須寫入 fillcolor = ""(但所有非空字串都不能在 cfg 檔案中包含引號)。

  • 如果要反映海龜的狀態,則必須使用 resizemode = auto

  • 例如,如果您設定 language = italian,則會在匯入時載入 docstringdict turtle_docstringdict_italian.py (如果它存在於匯入路徑上,例如與 turtle 相同的目錄中)。

  • 條目 *exampleturtle* 和 *examplescreen* 定義了這些物件在文件字串中出現的名稱。將方法文件字串轉換為函式文件字串時,將從文件字串中刪除這些名稱。

  • *using_IDLE*:如果您經常使用 IDLE 及其 -n 開關(“無子程序”),請將其設定為 True。這將阻止 exitonclick() 進入主迴圈。

在儲存 turtle 的目錄中,以及當前工作目錄中,可以存在 turtle.cfg 檔案。後者將覆蓋前者的設定。

Lib/turtledemo 目錄包含一個 turtle.cfg 檔案。您可以將其作為示例進行研究,並在執行演示時檢視其效果(最好不要在演示檢視器中執行)。

turtledemo — 演示指令碼

turtledemo 包包含一組演示指令碼。這些指令碼可以使用提供的演示檢視器執行和檢視,如下所示:

python -m turtledemo

或者,您可以單獨執行演示指令碼。例如:

python -m turtledemo.bytedesign

turtledemo 包目錄包含:

  • 一個演示檢視器 __main__.py,可用於檢視指令碼的原始碼並同時執行它們。

  • 多個指令碼演示了 turtle 模組的不同功能。可以透過“示例”選單訪問示例。它們也可以獨立執行。

  • 一個 turtle.cfg 檔案,用作如何編寫和使用此類檔案的示例。

演示指令碼為:

名稱

描述

特點

bytedesign

複雜的經典 turtle 圖形圖案

tracer(), delay, update()

chaos

繪製 Verhulst 動態圖,表明計算機的計算有時會產生與常識預期相反的結果

世界座標

clock

顯示計算機時間的模擬時鐘

烏龜作為時鐘的指標,ontimer

colormixer

使用 r, g, b 進行實驗

ondrag()

forest

3 個廣度優先樹

隨機化

fractalcurves

Hilbert 和 Koch 曲線

遞迴

lindenmayer

民族數學(印度 kolams)

L 系統

minimal_hanoi

漢諾塔

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

nim

與計算機玩經典的 Nim 遊戲,使用三堆棍子。

烏龜作為 Nim 棍子,事件驅動(滑鼠,鍵盤)

paint

超級簡約的繪圖程式

onclick()

peace

基本

烏龜:外觀和動畫

penrose

使用風箏和飛鏢的非週期性平鋪

stamp()

planet_and_moon

引力系統模擬

複合形狀,Vec2D

rosette

來自維基百科關於 turtle 圖形文章的圖案

clone()undo()

round_dance

成對向相反方向旋轉的跳舞烏龜

複合形狀,克隆 shapesize,傾斜,get_shapepoly,更新

sorting_animate

不同排序方法的視覺演示

簡單對齊,隨機化

tree

一個(圖形化的)廣度優先樹(使用生成器)

clone()

two_canvases

簡單設計

兩個畫布上的烏龜

yinyang

另一個基本示例

circle()

玩得開心!

自 Python 2.6 以來的更改

  • 方法 Turtle.tracerTurtle.window_widthTurtle.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 以來的更改