turtle --- タートルグラフィックス¶
ソースコード: Lib/turtle.py
Imagine a robotic turtle starting at (0, 0) in the x-y plane.
After an import turtle, give it the command turtle.forward(15), and it
moves (on-screen!) 15 pixels in the direction it is facing, drawing a line as
it moves. Give it the command turtle.right(25), and it rotates in-place 25
degrees clockwise.
Turtle graphics is an implementation of the drawing tools introduced in Logo in 1967. It was created as an educational tool, and its instant, visible feedback makes it an effective way for learners to encounter programming concepts. It is also a convenient way to produce simple graphical output without bringing in external libraries.
This document includes four main sections:
チュートリアル teaches the basics of turtle drawing.
Reference describes the functions, methods and classes this module defines.
How-to guides detail how to handle specific tasks.
説明 provides background on the object-oriented interface.
注釈
Turtle graphics requires the tkinter optional module.
The python.org installers for Windows and macOS include it, but some
Linux distributions and other platforms may package it separately. If
import turtle fails with an error mentioning _tkinter, look for
documentation from your distributor (that is, whoever provided Python to you).
Check this in advance if you're planning to use turtle graphics with a learner.
チュートリアル¶
初めて使う方はここから始めてください。 このチュートリアルでは、タートルによる描画の基本をいくつか学びます。
タートルの環境を起動する¶
Python シェルで、turtle モジュールのすべてのオブジェクトをインポートします。
from turtle import *
If you run into a No module named '_tkinter' error, you'll have to
install the Tk interface package on your system.
基本的な描画¶
タートルを 100 歩前進させます。
forward(100)
You should see (most likely, in a new window on your display) a line drawn by the turtle, heading East. Change the direction of the turtle, so that it turns 120 degrees left (anti-clockwise):
left(120)
続けて三角形を描いてみましょう。
forward(100)
left(120)
forward(100)
方向を指示すると、矢印で表されたタートルの向きが変わることに注目してください。
Experiment with those commands, and also with backward() and
right(). Many commands also have shorter aliases, such as fd() for
forward().
Pen の制御¶
例えば 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()
次にループを作ります。
start = pos()
while True:
forward(200)
left(170)
if distance(start) < 1:
break
distance(start) < 1 is a good way to know when the turtle is back at its
start position.
最後に塗りつぶしを完了します。
end_fill()
(実際に塗りつぶされるのは、end_fill() コマンドを実行したときだけです。)
Reference¶
Turtle methods and functions¶
この節のほとんどの例では 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 -- 数
Move the turtle backward by distance, opposite to the direction the turtle is headed. The turtle's heading does not change.
>>> turtle.position() (0.00,0.00) >>> turtle.backward(30) >>> turtle.position() (-30.00,0.00)
- turtle.right(angle)¶
- turtle.rt(angle)¶
- パラメータ:
angle -- 数
Turn the turtle right by the specified angle. The angle is measured in degrees by default; the unit can be changed with
degrees()orradians(). How the heading is measured depends on the turtle mode, seemode().>>> turtle.heading() 22.0 >>> turtle.right(45) >>> turtle.heading() 337.0
- turtle.left(angle)¶
- turtle.lt(angle)¶
- パラメータ:
angle -- 数
Turn the turtle left by the specified angle. The angle is measured in degrees by default; the unit can be changed with
degrees()orradians(). How the heading is measured depends on the turtle mode, seemode().>>> 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
Move the turtle to an absolute position. If y is
None, x must be a pair of coordinates or aVec2D, for example as returned bypos(). If the pen is down, a line is drawn. The turtle's heading does not change.>>> tp = turtle.pos() >>> tp (0.00,0.00) >>> turtle.goto(60,30) >>> turtle.pos() (60.00,30.00) >>> turtle.goto((20,80)) >>> turtle.pos() (20.00,80.00) >>> turtle.goto(tp) >>> turtle.pos() (0.00,0.00)
- turtle.teleport(x, y=None, *, fill_gap=False)¶
- パラメータ:
x -- 数または
Noney -- 数または
Nonefill_gap -- ブール値
Move turtle to an absolute position. Unlike goto(x, y), a line will not be drawn. The turtle's orientation does not change. If currently filling, the polygon(s) teleported from will be filled after leaving, and filling will begin again after teleporting. This can be disabled with fill_gap=True, which makes the imaginary line traveled during teleporting act as a fill barrier like in 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 -- 数
Set the turtle's x coordinate to x. The y coordinate is unchanged.
>>> turtle.position() (0.00,240.00) >>> turtle.setx(10) >>> turtle.position() (10.00,240.00)
- turtle.sety(y)¶
- パラメータ:
y -- 数
Set the turtle's y coordinate to y. The x coordinate is unchanged.
>>> 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 -- 数
Set the turtle's heading to to_angle. Here are some common directions in degrees:
標準モード
logo モード
0 - 東
0 - 北
90 - 北
90 - 東
180 - 西
180 - 南
270 - 南
270 - 西
>>> turtle.setheading(90) >>> turtle.heading() 90.0
- turtle.home()¶
Move the turtle to the origin, coordinates (0,0). The turtle's heading is set to its start orientation, which depends on the turtle mode, see
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 -- 数または
Nonesteps -- 整数または
None
Draw a circle with the given radius. The center is radius units left of the turtle; extent, an angle, determines which part of the circle is drawn. If extent is not given, draw the entire circle. If extent is not a full circle, one endpoint of the arc is the current pen position. Draw the arc in counterclockwise direction if radius is positive, otherwise in clockwise direction. Finally, the turtle's heading is changed by extent.
As the circle is approximated by an inscribed regular polygon, steps determines the number of steps to use. If not given, it will be calculated automatically. May be used to draw regular polygons.
>>> 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()¶
- turtle.dot(size)
- turtle.dot(color, /)
- turtle.dot(size, color, /)
- turtle.dot(size, r, g, b, /)
- パラメータ:
size -- 1 以上の整数 (与えられる場合には)
color -- 色を表わす文字列またはタプル
Draw a circular dot with diameter size, using color. If size is not given, the maximum of
pensize+4and2*pensizeis used.>>> 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 個のハンコを消します。 n が
Noneの場合、全てのハンコを消します。 n が正の場合には最初の n 個、 n が負の場合には最後の n 個を消します。>>> for i in range(8): ... unused_stamp_id = turtle.stamp() ... turtle.fd(30) >>> turtle.clearstamps(2) >>> turtle.clearstamps(-2) >>> turtle.clearstamps()
- turtle.undo()¶
最後の(繰り返すことにより複数の)タートルの動きを取り消します。取り消しできる動きの最大数は undobuffer のサイズによって決まります。
>>> 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/backward ではタートルがジャンプし、left/right では瞬時に方向を変えます。
>>> turtle.speed() 3 >>> turtle.speed('normal') >>> turtle.speed() 6 >>> turtle.speed(9) >>> turtle.speed() 9
Turtle の状態を知る¶
- turtle.position()¶
- turtle.pos()¶
Return the turtle's current location (x,y) as a
Vec2Dvector.>>> turtle.pos() (440.00,-0.00)
- turtle.towards(x, y=None)¶
- パラメータ:
x -- 数または数のペア/ベクトルまたはタートルのインスタンス
y -- x が数ならば数、そうでなければ
None
Return the angle of the line from the turtle's position to (x,y). If y is
None, x must be a pair of coordinates, aVec2D, for example as returned bypos(), or another turtle. The angle is measured from the turtle's start orientation, which depends on the turtle mode, seemode().>>> 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()¶
Return the turtle's current heading. The value depends on the turtle mode, see
mode().>>> turtle.home() >>> turtle.left(67) >>> turtle.heading() 67.0
- turtle.distance(x, y=None)¶
- パラメータ:
x -- 数または数のペア/ベクトルまたはタートルのインスタンス
y -- x が数ならば数、そうでなければ
None
Return the distance from the turtle to (x,y) in turtle step units. If y is
None, x must be a pair of coordinates, aVec2D, for example as returned bypos(), or another turtle.>>> 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 -- 数
Set the angle measurement units to degrees. The number of degrees in a full circle is set to fullcircle, which defaults to 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()¶
Set the angle measurement units to radians. Equivalent to
degrees(2 * math.pi).>>> turtle.home() >>> turtle.left(90) >>> turtle.heading() 90.0 >>> turtle.radians() >>> turtle.heading() 1.5707963267948966
Pen の制御¶
描画状態¶
- turtle.pensize(width=None)¶
- turtle.width(width=None)¶
- パラメータ:
width -- 正の数
線の太さを width にするか、または現在の太さを返します。resizemode が "auto" でタートルの形が多角形の場合、その多角形も同じ太さで描画されます。引数が渡されなければ、現在の pensize が返されます。
>>> turtle.pensize() 1 >>> turtle.pensize(10) # これ以降は幅 10 の線を描く
- turtle.pen(pen=None, **pendict)¶
- パラメータ:
pen -- 以下のキーの一部またはすべてを持つ辞書
pendict -- 以下のキーをキーワードとする、1 つ以上のキーワード引数
ペンの属性を "pen-dictionary" に以下のキー/値ペアで設定するかまたは返します:
"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()¶
- turtle.pencolor(color, /)
- turtle.pencolor(r, g, b, /)
ペンの色(pencolor)を設定するかまたは返します。
4種類の入力形式が受け入れ可能です:
pencolor()Return the current pencolor as color specification string or as a tuple (see example). May be used as input to another color/pencolor/fillcolor/bgcolor call.
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()¶
- turtle.fillcolor(color, /)
- turtle.fillcolor(r, g, b, /)
塗りつぶしの色(fillcolor)を設定するかまたは返します。
4種類の入力形式が受け入れ可能です:
fillcolor()Return the current fillcolor as color specification string, possibly in tuple format (see example). May be used as input to another color/pencolor/fillcolor/bgcolor call.
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()¶
- turtle.color(color, /)
- turtle.color(r, g, b, /)
- turtle.color(pencolor, fillcolor, /)
ペンの色(pencolor)と塗りつぶしの色(fillcolor)を設定するかまたは返します。
いくつかの入力形式が受け入れ可能です。形式ごとに 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))
こちらも参照: スクリーンのメソッド colormode() 。
塗りつぶし¶
- turtle.filling()¶
Return fillstate (
Trueif filling,Falseelse).>>> 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 -- 三つ組み (fontname, fontsize, fonttype)
文字を書きます— arg の文字列表現を、現在のタートルの位置に、 align ("left", "center", "right" のどれか) に従って、 与えられたフォントで。 もし move が真ならば、ペンは書いた文の右下隅に移動します。 デフォルトでは、 move は
Falseです。>>> turtle.write("Home = ", True, align="center") >>> turtle.write((0,0), True)
タートルの状態¶
可視性¶
- turtle.hideturtle()¶
- turtle.ht()¶
タートルを見えなくします。 複雑な図を描いている途中、タートルが見えないようにするのは良い考えです。 というのもタートルを隠すことで描画が目に見えて速くなるからです。
>>> turtle.hideturtle()
- turtle.isvisible()¶
タートルが見えている状態ならば
Trueを、隠されていればFalseを返します。>>> turtle.hideturtle() >>> turtle.isvisible() False >>> turtle.showturtle() >>> turtle.isvisible() True
見た目¶
- turtle.shape(name=None)¶
- パラメータ:
name -- 形の名前(shapename)として正しい文字列
タートルの形を与えられた名前(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 が与えられなければ、現在のサイズ変更モードを返します。それぞれのサイズ変更モードは以下の効果を持ちます:
"auto": ペンのサイズに対応してタートルの見た目を調整します。
"user": 伸長係数(stretchfactor)およびアウトライン幅(outlinewidth)の値に対応してタートルの見た目を調整します。これらの値は
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" に設定されたときかつそのときに限り、タートルは伸長係数(stretchfactor)に従って伸長されて表示されます。 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 -- 数
タートルの形(turtleshape)を現在の傾斜角から角度(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 要素のタプルとして返します。 指定した場合はその要素を設定し、第 1 行が
t11、t12、第 2 行がt21、t22の行列に従ってタートルの形状を変換します。 行列式t11 * t22 - t12 * t21は 0 であってはならず、0 の場合はエラーを送出します。 指定された行列に応じて、伸縮率、せん断係数、傾斜角を変更します。>>> 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 -- 2引数の関数でキャンバスのクリックされた点の座標を引数として呼び出されるものです
btn -- マウスボタンの番号、デフォルトは 1 (左マウスボタン)
add --
TrueまたはFalse--Trueならば、 新しい束縛が追加されますが、そうでなければ、 以前の束縛を置き換えます。
fun をタートルのマウスクリック(mouse-click)イベントに束縛します。 fun が
Noneならば、既存の束縛が取り除かれます。無名タートル、つまり手続き的なやり方の例です:>>> def turn(x, y): ... left(180) ... >>> onclick(turn) # タートルをクリックすると向きが変わる >>> onclick(None) # イベントの束縛を削除する
- turtle.onrelease(fun, btn=1, add=None)¶
- パラメータ:
fun -- 2引数の関数でキャンバスのクリックされた点の座標を引数として呼び出されるものです
btn -- マウスボタンの番号、デフォルトは 1 (左マウスボタン)
add --
TrueまたはFalse--Trueならば、 新しい束縛が追加されますが、そうでなければ、 以前の束縛を置き換えます。
fun をタートルのマウスボタンリリース(mouse-button-release)イベントに束縛します。 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.onrelease(turtle.unglow) # ボタンを離すと透明になる
- turtle.ondrag(fun, btn=1, add=None)¶
- パラメータ:
fun -- 2引数の関数でキャンバスのクリックされた点の座標を引数として呼び出されるものです
btn -- マウスボタンの番号、デフォルトは 1 (左マウスボタン)
add --
TrueまたはFalse--Trueならば、 新しい束縛が追加されますが、そうでなければ、 以前の束縛を置き換えます。
fun をタートルのマウスムーブ(mouse-move)イベントに束縛します。 fun が
Noneならば、既存の束縛が取り除かれます。注意: 全てのマウスムーブイベントのシーケンスに先立ってマウスクリックイベントが起こります。
>>> turtle.ondrag(turtle.goto)
この後、タートルをクリックしてドラッグするとタートルはスクリーン上を動きそれによって(ペンが下りていれば)手書きの線ができあがります。
特別な Turtle のメソッド¶
- 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()¶
Turtle オブジェクトそのものを返します。唯一の意味のある使い方: 無名タートルを返す関数として使う:
>>> 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()メソッド/関数で取り消せるかの最大数を与えます。 size がNoneならば、アンドゥバッファは無効化されます。>>> turtle.setundobuffer(42)
- turtle.undobufferentries()¶
アンドゥバッファのエントリー数を返します。
>>> while undobufferentries(): ... undo()
Compound shapes¶
合成されたタートルの形、つまり幾つかの色の違う多角形から成るような形を使うには、以下のように補助クラス Shape を直接使わなければなりません:
タイプ "compound" の空の Shape オブジェクトを作ります。
addcomponent()メソッドを使って、好きなだけここにコンポーネントを追加します。例えば:
>>> s = Shape("compound") >>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5)) >>> s.addcomponent(poly1, "red", "blue") >>> poly2 = ((0,0),(10,-5),(-10,-5)) >>> s.addcomponent(poly2, "blue", "red")
こうして作った Shape を Screen の形のリスト(shapelist) に追加して使います:
>>> register_shape("myshape", s) >>> shape("myshape")
注釈
Shape クラスは register_shape() の内部では違った使われ方をします。アプリケーションを書く人が Shape クラスを扱わなければならないのは、上で示したように合成された形を使うとき だけ です!
Screen methods and functions¶
この節のほとんどの例では screen という名前の TurtleScreen インスタンスを使います。
ウィンドウの制御¶
- turtle.bgcolor()¶
- turtle.bgcolor(color, /)
- turtle.bgcolor(r, g, b, /)
Return or set the background color of the TurtleScreen.
4種類の入力形式が受け入れ可能です:
bgcolor()Return the current background color as color specification string or as a tuple (see example). May be used as input to another color/pencolor/fillcolor/bgcolor call.
bgcolor(colorstring)Set the background color to colorstring, which is a Tk color specification string, such as
"red","yellow", or"#33cc8c".bgcolor((r, g, b))Set the background color to the RGB color represented by the tuple of r, g, and b. Each of r, g, and b must be in the range 0..colormode, where colormode is either 1.0 or 255 (see
colormode()).bgcolor(r, g, b)Set the background color to the RGB color represented by r, g, and b. Each of r, g, and b must be in the range 0..colormode.
>>> screen.bgcolor("orange") >>> screen.bgcolor() 'orange' >>> screen.bgcolor("#800080") >>> screen.bgcolor() (128.0, 0.0, 128.0)
- turtle.bgpic(picname=None)¶
- パラメータ:
picname -- a string, name of a gif-file or
"nopic", orNone
背景の画像を設定するかまたは現在の背景画像(backgroundimage)の名前を返します。 picname がファイル名ならば、その画像を背景に設定します。 picname が
"nopic"ならば、(もしあれば)背景画像を削除します。 picname がNoneならば、現在の背景画像のファイル名を返します。>>> screen.bgpic() 'nopic' >>> screen.bgpic("landscape.gif") >>> screen.bgpic() "landscape.gif"
- turtle.clear()
注釈
この TurtleScreen メソッドはグローバル関数としては
clearscreenという名前でだけ使えます。グローバル関数clearは Turtle メソッドのclearから派生した別ものです。
- turtle.clearscreen()¶
全ての図形と全てのタートルを TurtleScreen から削除します。そして空になった TurtleScreen をリセットして初期状態に戻します: 白い背景、背景画像もイベント束縛もなく、トレーシングはオンです。
- turtle.reset()
注釈
この TurtleScreen メソッドはグローバル関数としては
resetscreenという名前でだけ使えます。グローバル関数resetは Turtle メソッドのresetから派生した別ものです。
- turtle.resetscreen()¶
スクリーン上の全てのタートルをリセットしその初期状態に戻します。
- turtle.screensize(canvwidth=None, canvheight=None, bg=None)¶
- パラメータ:
canvwidth -- 正の整数でピクセル単位の新しいキャンバス幅(canvaswidth)
canvheight -- 正の整数でピクセル単位の新しいキャンバス高さ(canvasheight)
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-座標
ユーザー定義座標系を準備し必要ならばモードを "world" に切り替えます。この動作は
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)をミリ秒単位で設定するかまたはその値を返します。(これは概ね引き続くキャンバス更新の時間間隔です。) 遅延が大きくなると、アニメーションは遅くなります。
オプション引数:
>>> screen.delay() 10 >>> screen.delay(5) >>> screen.delay() 5
- turtle.tracer(n=None, delay=None)¶
- パラメータ:
n -- 非負整数
delay -- 非負整数
タートルのアニメーションをオン・オフし、描画更新の遅延を設定します。 n が与えられた場合、通常のスクリーン更新のうち 1/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 -- 引数なしの関数または
Nonekey -- 文字列: キー (例 "a") またはキー・シンボル (例 "space")
fun を指定されたキーのキーリリース(key-release)イベントに束縛します。 fun が
Noneならばイベント束縛は除かれます。注意: キー・イベントを登録できるようにするためには TurtleScreen はフォーカスを持っていないとなりません(listen()を参照)。>>> def f(): ... fd(50) ... lt(60) ... >>> screen.onkey(f, "Up") >>> screen.listen()
- turtle.onkeypress(fun, key=None)¶
- パラメータ:
fun -- 引数なしの関数または
Nonekey -- 文字列: キー (例 "a") またはキー・シンボル (例 "space")
keyを指定した場合はそのキーの押下イベントに、指定しなければ任意のキーの押下イベントに fun を束縛します。 キーイベントを受け取るには、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 -- 2引数の関数でキャンバスのクリックされた点の座標を引数として呼び出されるものです
btn -- マウスボタンの番号、デフォルトは 1 (左マウスボタン)
add --
TrueまたはFalse--Trueならば、 新しい束縛が追加されますが、そうでなければ、 以前の束縛を置き換えます。
fun をタートルのマウスクリック(mouse-click)イベントに束縛します。 fun が
Noneならば、既存の束縛が取り除かれます。Example for a
screenという名の TurtleScreen インスタンスとturtleという名前の Turtle インスタンスの例:>>> screen.onclick(turtle.goto) # これ以降、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.textinput(title, prompt)¶
- パラメータ:
title -- string
prompt -- string
Pop up a dialog window for input of a string. Parameter title is the title of the dialog window, prompt is a text mostly describing what information to input. Return the string input. If the dialog is canceled, return
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 -- 数 (省略可能)
Pop up a dialog window for input of a number. title is the title of the dialog window, prompt is a text mostly describing what numerical information to input. default: default value, minval: minimum value for input, maxval: maximum value for input. The number input must be in the range minval .. maxval if these are given. If not, a hint is issued and the dialog remains open for correction. Return the number input. If the dialog is canceled, return
None.>>> screen.numinput("Poker", "Your stakes:", 1000, minval=10, maxval=10000)
設定と特殊なメソッド¶
- turtle.mode(mode=None)¶
- パラメータ:
mode -- 文字列 "standard", "logo", "world" のいずれか
タートルのモード("standard", "logo", "world" のいずれか)を設定してリセットします。モードが渡されなければ現在のモードが返されます。
モード "standard" は古い
turtle互換です。モード "logo" は Logo タートルグラフィックスとほぼ互換です。モード "world" はユーザーの定義した「世界座標(world coordinates)」を使います。 重要なお知らせ: このモードではx/y比が 1 でないと角度が歪むかもしれません。モード
タートルの向きの初期値
正の角度
"standard"
右 (東) 向き
反時計回り
"logo"
上 (北) 向き
時計回り
>>> mode("logo") # resets turtle heading to north >>> mode() 'logo'
- turtle.colormode(cmode=None)¶
- パラメータ:
cmode -- 1.0 か 255 のどちらかの値
色モード(colormode)を返すか、または 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 の 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)¶
There are three different ways to call this function:
name is the name of a gif-file and shape is
None: Install the corresponding image shape.>>> screen.register_shape("turtle.gif")
注釈
画像の形はタートルが向きを変えても 回転しません ので、タートルがどちらを向いているか見ても判りません!
name が任意の文字列で shape が座標ペアのタプル: 対応する多角形を取り込みます。
>>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3)))
name が任意の文字列で shape が (合成形の)
Shapeオブジェクト: 対応する合成形を取り込みます。
タートルの形を TurtleScreen の形リスト(shapelist)に加えます。このように登録された形だけが
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-only methods¶
- turtle.bye()¶
タートルグラフィックス(turtlegraphics)のウィンドウを閉じます。
- turtle.exitonclick()¶
スクリーン上のマウスクリックに
bye()メソッドを束縛します。設定辞書中の "using_IDLE" の値が
False(デフォルトです) の場合、さらにメインループ(mainloop)に入ります。注意: もし IDLE が-nスイッチ(サブプロセスなし)付きで使われているときは、この値は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) >>> # 画面の左上に 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、ScrolledCanvas、またはTurtleScreen
タートルを作ります。タートルには上の「Turtle/RawTurtle のメソッド」で説明した全てのメソッドがあります。
- class turtle.Screen¶
TurtleScreen のサブクラスで 4つのメソッドが加わっています 。
- class turtle.ScrolledCanvas(master)¶
- パラメータ:
master -- この ScrolledCanvas すなわちスクロールバーの付いた Tkinter canvas を収める Tkinter ウィジェット
タートルたちが遊び回る場所として自動的に ScrolledCanvas を提供する Screen クラスによって使われます。
- 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 のアウトラインの色 (与えられた場合)
例:
>>> 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()
Compound shapes を参照。
- class turtle.Vec2D(x, y)¶
2次元ベクトルのクラスで、タートルグラフィックスを実装するための補助クラス。タートルグラフィックスを使ったプログラムでも有用でしょう。タプルから派生しているので、ベクターはタプルです!
以下の演算が使えます (a, b はベクトル、 k は数):
a + bベクトル和a - bベクトル差a * b内積k * aおよびa * kスカラー倍abs(a)a の絶対値a.rotate(angle)回転
Exceptions¶
The turtle module defines the following exception:
- exception turtle.TurtleGraphicsError¶
Raised for invalid arguments or operations. For example, a malformed color string:
>>> turtle.color("blau") Traceback (most recent call last): ... turtle.TurtleGraphicsError: bad color string: blau
How-to guides¶
この節では、タートルの典型的な用途と使い方をいくつか紹介します。
Use the turtle module namespace¶
from turtle import * は便利ですが、多数のオブジェクトをインポートする点には注意してください。
タートルグラフィックス以外の処理も行う場合は、名前が衝突するおそれがあります。
特に、他のモジュールもインポートする可能性があるスクリプトでタートルグラフィックスを使う場合は、問題になりやすくなります。
解決策は import turtle を使うことです。
fd() は turtle.fd()、width() は turtle.width() というように書きます。
("turtle" を何度も入力するのが面倒であれば、例えば import turtle as t を使ってください。)
Use turtle graphics in a script¶
すぐ上で説明したように、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)
ただし、もう 1 つ手順が必要です。 スクリプトが終わると、Python はタートルのウィンドウもすぐに閉じてしまいます。 次の行を
t.mainloop()
スクリプトの最後に追加してください。 これでスクリプトは終了の操作を待つようになり、タートルグラフィックスのウィンドウを閉じるなどして終了させるまで動作し続けます。
Use object-oriented turtle graphics¶
ごく基本的な入門や、すぐに試してみたい場合を除けば、タートルグラフィックスではオブジェクト指向の方法の方が一般的で、はるかに多くのことができます。 例えば、画面に複数のタートルを同時に表示できます。
この方法では、さまざまなタートルのコマンドが、主に Turtle オブジェクトのメソッドになります。
シェルでもオブジェクト指向の方法を 使えます が、通常は 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 のインスタンスです。
タートルとともに自動的に作成されます。
タートルの画面はカスタマイズできます。 例えば次のようにします。
t.screen.title('Object-oriented turtle demo')
t.screen.bgcolor("orange")
ヘルプの使い方¶
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 -- ファイル名として使われる文字列
ドキュメント文字列辞書(docstring-dictionary)を作って与えられたファイル名の Python スクリプトに書き込みます。この関数はわざわざ呼び出さなければなりません (タートルグラフィックスのクラスから使われることはありません)。ドキュメント文字列辞書は
filename.pyという Python スクリプトに書き込まれます。ドキュメント文字列の異なった言語への翻訳に対するテンプレートとして使われることを意図したものです。
もしあなたが(またはあなたの生徒さんが) 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
いくつかピックアップしたエントリーの短い説明:
最初の4行は
Screen.setupメソッドの引数に当たります。5行目6行目は
Screen.screensizeメソッドの引数に当たります。shape は最初から用意されている形ならどれでも使えます(arrow, turtle など)。詳しくは
help(shape)をお試し下さい。塗りつぶしの色(fill color)を使いたくない(つまりタートルを透明にしたい)場合、
fillcolor = ""と書かなければなりません (しかし全ての空でない文字列は cfg ファイル中で引用符を付けてはいけません)。タートルにその状態を反映させるためには
resizemode = autoとします。たとえば
language = italianとするとドキュメント文字列辞書(docstringdict) としてturtle_docstringdict_italian.pyがインポート時に読み込まれます (もしそれがインポートパス、たとえばturtleと同じディレクトリにあれば)。exampleturtle および examplescreen はこれらのオブジェクトのドキュメント文字列内での呼び名を決めます。メソッドのドキュメント文字列から関数のドキュメント文字列に変換する際に、これらの名前は取り除かれます。
using_IDLE: IDLE とその
-nスイッチ(サブプロセスなし)を常用するならば、この値をTrueに設定して下さい。これによりexitonclick()がメインループ(mainloop)に入るのを阻止します。
turtle.cfg ファイルは turtle の保存されているディレクトリと現在の作業ディレクトリに追加的に存在し得ます。後者が前者の設定をオーバーライドします。
Lib/turtledemo ディレクトリにも turtle.cfg ファイルがあります。 デモを実際に(できればデモビュワーからでなく)実行してそこに書かれたものとその効果を学びましょう。
説明¶
タートルオブジェクトは画面オブジェクト上に描画します。 タートルのオブジェクト指向インターフェースには、これらを作成して関連付けるための主要なクラスがいくつかあります。
Turtle インスタンスは、まだ Screen インスタンスがなければ、自動的に作成します。
Turtle は RawTurtle のサブクラスです。
RawTurtle は描画領域を自動的には作成 しない ため、canvas を渡すか作成する必要があります。
canvas には tkinter.Canvas、ScrolledCanvas、TurtleScreen を使えます。
TurtleScreen はタートルの基本的な描画領域です。
Screen は TurtleScreen のサブクラスで、サイズやタイトルを含む見た目と動作を管理するための 追加のメソッド を備えています。
TurtleScreen のコンストラクタには、tkinter.Canvas または ScrolledCanvas を引数として渡す必要があります。
タートルグラフィックスの関数インターフェースは、Turtle と TurtleScreen/Screen のさまざまなメソッドを使っています。
内部では、Screen のメソッドに由来する関数を呼び出すと、画面オブジェクトが自動的に作成されます。
同様に、Turtle のメソッドに由来する関数を呼び出すと、タートルオブジェクトが自動的に作成されます。
1 つの画面で複数のタートルを使うには、オブジェクト指向インターフェースを使う必要があります。
turtledemo --- デモスクリプト¶
turtledemo パッケージには一連のデモスクリプトが含まれています。これらのスクリプトは以下のように、付属のデモビューアを使用して実行および表示できます:
python -m turtledemo
あるいは、個別にデモスクリプトを実行できます。たとえば 、:
python -m turtledemo.bytedesign
turtledemo パッケージのディレクトリには次のものが含まれます:
ソースコードを眺めつつスクリプトを実行できるデモビュワー
__main__.py。Multiple scripts demonstrating different features of the
turtlemodule. Examples can be accessed via the Examples menu. They can also be run standalone.設定ファイルの書き方や使い方の例として参考にできる
turtle.cfgファイル。
デモスクリプトは以下の通りです:
名前 |
説明 |
フィーチャー |
|---|---|---|
|
複雑な古典的タートルグラフィックスパターン |
|
|
verhust 力学系のグラフ化, コンピュータの計算が常識的な予想に反する場合があることを示します。 |
世界座標系 |
|
コンピュータの時間を示すアナログ時計 |
turtles as clock's
hands, |
|
r, g, b の実験 |
|
|
幅優先で描く 3 本の木 |
ランダム化 |
|
Hilbert & Koch 曲線 |
再帰 |
|
民俗的数学 (インド kolams) |
L-システム |
|
ハノイの塔 |
Rectangular Turtles
as Hanoi discs
( |
|
棒の山を 3 つ使う古典的なニムゲームで、コンピュータと対戦します。 |
タートルをニムの棒として使用、イベント駆動 (マウス、キーボード) |
|
超極小主義的描画プログラム |
|
|
初歩的 |
turtle: 見た目とアニメーション |
|
凧と矢による非周期的タイリング |
|
|
重力系のシミュレーション |
合成形, |
|
タートルグラフィックスについての wikipedia の記事の例 |
|
|
ペアごとに逆向きに回転しながら踊るタートル |
compound shapes, |
|
さまざまなソート方法を視覚的に実演 |
単純な整列、ランダム化 |
|
(図形的) 幅優先木 (ジェネレータを使って) |
|
|
単純な図柄 |
2 つのキャンバス上のタートル |
|
もう一つの初歩的な例 |
楽しんでね!