タートルグラフィックスは子供にプログラミングを紹介するのによく使われます。 タートルグラフィックスは Wally Feurzig と Seymore Papert が 1966 年に開発した Logo プログラミング言語の一部でした。
x-y 平面の (0, 0) から動き出すロボット亀を想像してみて下さい。 turtle.forward(15) という命令を出すと、その亀が (スクリーン上で!) 15 ピクセル分顔を向けている方向に動き、動きに沿って線を引きます。 turtle.left(25) という命令を出すと、今度はその場で25度反時計回りに回ります。
これらの命令と他の同様な命令を組み合わせることで、複雑な形や絵が簡単に描けます。
turtle モジュールは同じ名前を持った Python 2.5 までのモジュールの拡張された再実装です。
再実装に際しては古い turtle モジュールのメリットをそのままに、 (ほぼ) 100% 互換性を保つようにしました。 すなわち、まず第一に、学習中のプログラマがモジュールを -n スイッチを付けて走らせている IDLE の中から全てのコマンド、クラス、メソッドを対話的に使えるようにしました。
turtle モジュールはオブジェクト指向と手続き指向の両方の方法でタートルグラフィックス・プリミティブを提供します。グラフィックスの基礎として Tkinter を使っているために、TkをサポートしたPythonのバージョンが必要です。
オブジェクト指向インターフェイスでは、本質的に 2+2 のクラスを使います:
TurtleScreen クラスはタートルが絵を描きながら走り回る画面を定義します。 そのコンストラクタには Tkinter.Canvas または ScrolledCanvas を渡す必要があります。 turtle をアプリケーションの一部として用いたい場合にはこれを使うべきです。
Screen() 関数は TurtleScreen のサブクラスのシングルトンオブジェクトを返します。 turtle をグラフィクスを使う一つの独立したツールとして使う場合には、 この関数を呼び出すべきです。 シングルトンなので、そのクラスからの継承はできません。
TurtleScreen/Screen の全てのメソッドは関数としても、すなわち、 手続き指向インターフェイスの一部としても存在しています。
RawTurtle (別名: RawPen) は TurtleScreen 上に絵を描く Turtle オブジェクトを定義します。 コンストラクタには Canvas, ScrolledCanvas, TurtleScreen のいずれかを引数として渡して RawTurtle オブジェクトがどこに絵を描くかを教えます。
RawTurtle の派生はサブクラス Turtle (別名: Pen) で、 “唯一の” Screen (既に与えられているのでなければ自動的に作られたインスタンス) に絵を描きます。
RawTurtle/Turtle の全てのメソッドは関数としても、すなわち、 手続き指向インターフェイスの一部としても存在しています。
手続き型インターフェイスでは Screen および Turtle クラスのメソッドを元にした関数を提供しています。 その名前は対応するメソッドと一緒です。 Screen のメソッドを元にした関数が呼び出されるといつでも screen オブジェクトが自動的に作られます。 Turtle のメソッドを元にした関数が呼び出されるといつでも(名無しの) turtle オブジェクトが自動的に作られます。
複数のタートルを一つのスクリーン上で使いたい場合、オブジェクト指向インターフェイスを使わなければなりません。
ノート
以下の文書では関数に対する引数リストが与えられています。 メソッドでは、勿論、ここでは省略されている self が第一引数になります。
この節のほとんどの例では turtle という名前の Turtle インスタンスを使います。
パラメタ: |
|
---|
タートルが頭を向けている方へ、タートルを距離 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)
パラメタ: |
|
---|
タートルが頭を向けている方と反対方向へ、タートルを距離 distance だけ後退させます。 タートルの向きは変えません。
>>> turtle.position()
(0.00, 0.00)
>>> turtle.backward(30)
>>> turtle.position()
(-30.00, 0.00)
パラメタ: |
|
---|
タートルを angle 単位だけ右に回します。 (単位のデフォルトは度ですが、 degrees() と radians() 関数を使って設定できます。) 角度の向きはタートルのモードによって意味が変わります。 mode() を参照してください。
>>> turtle.heading()
22.0
>>> turtle.right(45)
>>> turtle.heading()
337.0
パラメタ: |
|
---|
タートルを angle 単位だけ左に回します。 (単位のデフォルトは度ですが、 degrees() と radians() 関数を使って設定できます。) 角度の向きはタートルのモードによって意味が変わります。 mode() を参照してください。
>>> turtle.heading()
22.0
>>> turtle.left(45)
>>> turtle.heading()
67.0
パラメタ: |
|
---|
y が None の場合、 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)
パラメタ: |
|
---|
タートルの第一座標を x にします。 第二座標は変わりません。
>>> turtle.position()
(0.00, 240.00)
>>> turtle.setx(10)
>>> turtle.position()
(10.00, 240.00)
パラメタ: |
|
---|
タートルの第二座標を y にします。 第一座標は変わりません。
>>> turtle.position()
(0.00, 40.00)
>>> turtle.sety(-10)
>>> turtle.position()
(0.00, -10.00)
パラメタ: |
|
---|
タートルの向きを to_angle に設定します。 以下はよく使われる方向を度で表わしたものです:
標準モード | logo モード |
---|---|
0 - 東 | 0 - 北 |
90 - 北 | 90 - 東 |
180 - 西 | 180 - 南 |
270 - 南 | 270 - 西 |
>>> turtle.setheading(90)
>>> turtle.heading()
90
パラメタ: |
|
---|
半径 radius の円を描きます。 中心はタートルの左 radius ユニットの点です。 extent – 角度です – は円のどの部分を描くかを決定します。 extent が与えられなければ、デフォルトで完全な円になります。 extent が完全な円でない場合は、弧の一つの端点は、現在のペンの位置です。 radius が正の場合、弧は反時計回りに描かれます。 そうでなければ、時計回りです。 最後にタートルの向きが extent 分だけ変わります。
円は内接する正多角形で近似されます。 steps でそのために使うステップ数を決定します。 この値は与えられなければ自動的に計算されます。 また、これを正多角形の描画に利用することもできます。
>>> turtle.circle(50)
>>> turtle.circle(120, 180) # 半円を描きます
パラメタ: |
|
---|
直径 size の丸い点を color で指定された色で描きます。 size が与えられなかった場合、pensize+4 と 2*pensize の大きい方が使われます。
>>> turtle.dot()
>>> turtle.fd(50); turtle.dot(20, "blue"); turtle.fd(50)
キャンバス上の現在タートルがいる位置にタートルの姿のハンコを押します。 そのハンコに対して stamp_id が返されますが、 これを使うと後で clearstamp(stamp_id) のように呼び出して消すことができます。
>>> turtle.color("blue")
>>> turtle.stamp()
13
>>> turtle.fd(50)
パラメタ: |
|
---|
stampid に対応するハンコを消します。
>>> turtle.color("blue")
>>> astamp = turtle.stamp()
>>> turtle.fd(50)
>>> turtle.clearstamp(astamp)
パラメタ: |
|
---|
全ての、または最初の/最後の n 個のハンコを消します。 n が None の場合、全てのハンコを消します。 n が正の場合には最初の n 個、 n が負の場合には最後の n 個を消します。
>>> for i in range(8):
... turtle.stamp(); turtle.fd(30)
>>> turtle.clearstamps(2)
>>> turtle.clearstamps(-2)
>>> turtle.clearstamps()
最後の(繰り返すことにより複数の)タートルの動きを取り消します。 取り消しできる動きの最大数は undobuffer のサイズによって決まります。
>>> for i in range(4):
... turtle.fd(50); turtle.lt(80)
...
>>> for i in range(8):
... turtle.undo()
パラメタ: |
|
---|
タートルのスピードを 0 から 10 までの範囲の整数に設定します。 引数が与えられない場合は現在のスピードを返します。
与えられた数字が 10 より大きかったり 0.5 より小さかったりした場合は、 スピードは 0 になります。 スピードを表わす文字列は次のように数字に変換されます:
1 から 10 までのスピードを上げていくにつれて線を描いたりタートルが回ったりするアニメーションがだんだん速くなります。
注意: speed = 0 はアニメーションを無くします。 forward/backward ではタートルがジャンプし、left/right では瞬時に方向を変えます。
>>> turtle.speed(3)
パラメタ: |
|
---|
タートルの位置から指定された (x,y) への直線の角度を返します。 この値はタートルの開始方向にそして開始方向はモード (“standard”/”world” または “logo”) に依存します。
>>> turtle.pos()
(10.00, 10.00)
>>> turtle.towards(0,0)
225.0
タートルの x 座標を返します。
>>> reset()
>>> turtle.left(60)
>>> turtle.forward(100)
>>> print turtle.xcor()
50.0
タートルの y 座標を返します。
>>> reset()
>>> turtle.left(60)
>>> turtle.forward(100)
>>> print turtle.ycor()
86.6025403784
タートルの現在の向きを返します (返される値はタートルのモードに依存します。 mode() を参照してください)。
>>> turtle.left(67)
>>> turtle.heading()
67.0
パラメタ: |
|
---|
タートルから与えられた (x,y) あるいはベクトルあるいは渡されたタートルへの距離を、 タートルのステップを単位として測った値を返します。
>>> turtle.pos()
(0.00, 0.00)
>>> turtle.distance(30,40)
50.0
>>> joe = Turtle()
>>> joe.forward(77)
>>> turtle.distance(joe)
77.0
パラメタ: |
|
---|
角度を計る単位「度」を、円周を何等分するかという値に指定します。 デフォルトは360等分で通常の意味での度です。
>>> turtle.left(90)
>>> turtle.heading()
90
>>> turtle.degrees(400.0) # 単位 gon による角度
>>> turtle.heading()
100
角度を計る単位をラジアンにします。 degrees(2*math.pi) と同じ意味です。
>>> turtle.heading()
90
>>> turtle.radians()
>>> turtle.heading()
1.5707963267948966
パラメタ: |
|
---|
線の太さを width にするか、または現在の太さを返します。 resizemode が “auto” でタートルの形が多角形の場合、 その多角形も同じ太さで描画されます。 引数が渡されなければ、現在の pensize が返されます。
>>> turtle.pensize()
1
>>> turtle.pensize(10) # これ以降幅 10 の線が描かれます
パラメタ: |
|
---|
ペンの属性を “pen-dictionary” に以下のキー/値ペアで設定するかまたは返します。
この辞書を以降の pen() 呼出しに渡して以前のペンの状態に復旧することができます。 さらに一つ以上の属性をキーワード引数として渡すこともできます。 一つの文で幾つものペンの属性を設定するのに使えます。
>>> turtle.pen(fillcolor="black", pencolor="red", pensize=10)
>>> turtle.pen()
{'pensize': 10, 'shown': True, 'resizemode': 'auto', 'outline': 1,
'pencolor': 'red', 'pendown': True, 'fillcolor': 'black',
'stretchfactor': (1,1), 'speed': 3}
>>> penstate=turtle.pen()
>>> turtle.color("yellow","")
>>> turtle.penup()
>>> turtle.pen()
{'pensize': 10, 'shown': True, 'resizemode': 'auto', 'outline': 1,
'pencolor': 'yellow', 'pendown': False, 'fillcolor': '',
'stretchfactor': (1,1), 'speed': 3}
>>> p.pen(penstate, fillcolor="green")
>>> p.pen()
{'pensize': 10, 'shown': True, 'resizemode': 'auto', 'outline': 1,
'pencolor': 'red', 'pendown': True, 'fillcolor': 'green',
'stretchfactor': (1,1), 'speed': 3}
もしペンが下りていれば True を、上がっていれば False を返します。
>>> turtle.penup()
>>> turtle.isdown()
False
>>> turtle.pendown()
>>> turtle.isdown()
True
ペンの色(pencolor)を設定するかまたは返します。
4種類の入力形式が受け入れ可能です:
タートルの形(turtleshape)が多角形の場合、多角形の外側が新しく設定された色で描かれます。
>>> turtle.pencolor("brown")
>>> tup = (0.2, 0.8, 0.55)
>>> turtle.pencolor(tup)
>>> turtle.pencolor()
"#33cc8c"
塗りつぶしの色(fillcolor)を設定するかまたは返します。
4種類の入力形式が受け入れ可能です:
タートルの形(turtleshape)が多角形の場合、多角形の内側が新しく設定された色で描かれます。
>>> turtle.fillcolor("violet")
>>> col = turtle.pencolor()
>>> turtle.fillcolor(col)
>>> turtle.fillcolor(0, .5, 0)
ペンの色(pencolor)と塗りつぶしの色(fillcolor)を設定するかまたは返します。
いくつかの入力形式が受け入れ可能です。 形式ごとに 0 から 3 個の引数を以下のように使います:
タートルの形(turtleshape)が多角形の場合、多角形の内側も外側も新しく設定された色で描かれます。
>>> turtle.color("red", "green")
>>> turtle.color()
("red", "green")
>>> colormode(255)
>>> color((40, 80, 120), (160, 200, 240))
>>> color()
("#285078", "#a0c8f0")
こちらも参照: スクリーンのメソッド colormode() 。
パラメタ: |
|
---|
塗りつぶしたい形を描く前に fill(True) を呼び出し、それが終わったら fill(False) を呼び出します。 引数なしで呼び出されたときは、塗りつぶしの状態(fillstate)の値 (True なら塗りつぶす、 False なら塗りつぶさない)を返します。
>>> turtle.fill(True)
>>> for _ in range(3):
... turtle.forward(100)
... turtle.left(120)
...
>>> turtle.fill(False)
塗りつぶしたい図形を描く直前に呼び出します。 fill(True) と等価です。
>>> turtle.color("black", "red")
>>> turtle.begin_fill()
>>> turtle.circle(60)
>>> turtle.end_fill()
最後に呼び出された begin_fill() の後に描かれた図形を塗りつぶします。 fill(False) と等価です。
タートルの描いたものをスクリーンから消し、タートルを中心に戻して、 全ての変数をデフォルト値に設定し直します。
>>> turtle.position()
(0.00,-22.00)
>>> turtle.heading()
100.0
>>> turtle.reset()
>>> turtle.position()
(0.00,0.00)
>>> turtle.heading()
0.0
タートルの描いたものをスクリーンから消します。タートルは動かしません。 タートルの状態と位置、それに他のタートルたちの描いたものは影響を受けません。
パラメタ: |
|
---|
文字を書きます— arg の文字列表現を、現在のタートルの位置に、 align (“left”, “center”, right” のどれか) に従って、 与えられたフォントで。 もし move が True ならば、ペンは書いた文の右下隅に移動します。 デフォルトでは、 move は False です。
>>> turtle.write("Home = ", True, align="center")
>>> turtle.write((0,0), True)
タートルを見えなくします。 複雑な図を描いている途中、タートルが見えないようにするのは良い考えです。 というのもタートルを隠すことで描画が目に見えて速くなるからです。
>>> turtle.hideturtle()
タートルが見えている状態ならば True を、隠されていれば False を返します。
>>> turtle.hideturtle()
>>> print turtle.isvisible():
False
パラメタ: |
|
---|
タートルの形を与えられた名前(name)の形に設定するか、 もしくは名前が与えられなければ現在の形の名前を返します。 name という名前の形は TurtleScreen の形の辞書に載っていなければなりません。 最初は次の多角形が載っています: “arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”。 形についての扱いを学ぶには Screen のメソッド register_shape() を参照して下さい。
>>> turtle.shape()
"arrow"
>>> turtle.shape("turtle")
>>> turtle.shape()
"turtle"
パラメタ: |
|
---|
サイズ変更のモード(resizemode)を “auto”, “user”, “noresize” のどれかに設定します。 もし rmode が与えられなければ、現在のサイズ変更モードを返します。 それぞれのサイズ変更モードは以下の効果を持ちます:
resizemode(“user”) は shapesize() に引数を渡したときに呼び出されます。
>>> turtle.resizemode("noresize")
>>> turtle.resizemode()
"noresize"
パラメタ: |
|
---|
ペンの属性 x/y-伸長係数および/またはアウトラインを返すかまたは設定します。 サイズ変更のモードは “user” に設定されます。 サイズ変更のモードが “user” に設定されたときかつそのときに限り、 タートルは伸長係数(stretchfactor)に従って伸長されて表示されます。 stretch_wid は進行方向に直交する向きの伸長係数で、 stretch_len は進行方向に沿ったの伸長係数、 outline はアウトラインの幅を決めるものです。
>>> turtle.resizemode("user")
>>> turtle.shapesize(5, 5, 12)
>>> turtle.shapesize(outline=8)
パラメタ: |
|
---|
タートルの形(turtleshape)を現在の傾斜角から角度(angle)だけ回転します。 このときタートルの進む方向は 変わりません 。
>>> turtle.shape("circle")
>>> turtle.shapesize(5,2)
>>> turtle.tilt(30)
>>> turtle.fd(50)
>>> turtle.tilt(30)
>>> turtle.fd(50)
パラメタ: |
|
---|
タートルの形(turtleshape)を現在の傾斜角に関わらず、 指定された角度(angle)の向きに回転します。 タートルの進む方向は 変わりません 。
>>> turtle.shape("circle")
>>> turtle.shapesize(5,2)
>>> turtle.settiltangle(45)
>>> stamp()
>>> turtle.fd(50)
>>> turtle.settiltangle(-45)
>>> stamp()
>>> turtle.fd(50)
現在の傾斜角を返します。 すなわち、タートルの形が向いている角度と進んでいく方向との間の角度を返します。
>>> turtle.shape("circle")
>>> turtle.shapesize(5,2)
>>> turtle.tilt(45)
>>> turtle.tiltangle()
45
パラメタ: |
|
---|
fun をタートルのマウスクリック(mouse-click)イベントに束縛します。 fun が None ならば、既存の束縛が取り除かれます。 無名タートル、つまり手続き的なやり方の例です:
>>> def turn(x, y):
... left(180)
...
>>> onclick(turn) # タートルをクリックすると回転します
>>> onclick(None) # イベント束縛は消去されます
パラメタ: |
|
---|
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) # リリース時に透明に
パラメタ: |
|
---|
fun をタートルのマウスムーブ(mouse-move)イベントに束縛します。 fun が None ならば、既存の束縛が取り除かれます。
注意: 全てのマウスムーブイベントのシーケンスに先立ってマウスクリックイベントが起こります。
>>> turtle.ondrag(turtle.goto)
# この後、タートルをクリックしてドラッグするとタートルはスクリーン上を動き
# それによって(ペンが下りていれば)手書きの線ができあがります
多角形の頂点の記録を開始します。現在のタートル位置が最初の頂点です。
多角形の頂点の記録を停止します。現在のタートル位置が最後の頂点です。 この頂点が最初の頂点と結ばれます。
最後に記録された多角形を返します。
>>> p = turtle.get_poly()
>>> turtle.register_shape("myFavouriteShape", p)
位置、向きその他のプロパティがそっくり同じタートルのクローンを作って返します。
>>> mick = Turtle()
>>> joe = mick.clone()
Turtle オブジェクトそのものを返します。 唯一の意味のある使い方: 無名タートルを返す関数として使う。
>>> pet = getturtle()
>>> pet.fd(50)
>>> pet
<turtle.Turtle object at 0x01417350>
>>> turtles()
[<turtle.Turtle object at 0x01417350>]
タートルが描画中の TurtleScreen オブジェクトを返します。 TurtleScreen のメソッドをそのオブジェクトに対して呼び出すことができます。
>>> ts = turtle.getscreen()
>>> ts
<turtle.Screen object at 0x01417710>
>>> ts.bgcolor("pink")
パラメタ: |
|
---|
アンドゥバッファを設定または無効化します。 size が整数ならばそのサイズの空のアンドゥバッファを用意します。 size の値はタートルのアクションを何度 undo() メソッド/関数で取り消せるかの最大数を与えます。 size が None ならば、アンドゥバッファは無効化されます。
>>> turtle.setundobuffer(42)
アンドゥバッファのエントリー数を返します。
>>> while undobufferentries():
... undo()
対応する TurtleScreen のメソッドの複製です。
バージョン 2.6 で撤廃.
合成されたタートルの形、つまり幾つかの色の違う多角形から成るような形を使うには、 以下のように補助クラス 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 という名前の TurtleScreen インスタンスを使います。
パラメタ: |
|
---|
TurtleScreen の背景色を設定するかまたは返します。
>>> screen.bgcolor("orange")
>>> screen.bgcolor()
"orange"
>>> screen.bgcolor(0.5,0,0.5)
>>> screen.bgcolor()
"#800080"
パラメタ: |
|
---|
背景の画像を設定するかまたは現在の背景画像(backgroundimage)の名前を返します。 picname がファイル名ならば、その画像を背景に設定します。 picname が "nopic" ならば、(もしあれば)背景画像を削除します。 picname が None ならば、現在の背景画像のファイル名を返します。
>>> screen.bgpic()
"nopic"
>>> screen.bgpic("landscape.gif")
>>> screen.bgpic()
"landscape.gif"
全ての図形と全てのタートルを TurtleScreen から削除します。 そして空になった TurtleScreen をリセットして初期状態に戻します: 白い背景、背景画像もイベント束縛もなく、トレーシングはオンです。
ノート
この TurtleScreen メソッドはグローバル関数としては clearscreen という名前でだけ使えます。 グローバル関数 clear は Turtle メソッドの clear から派生した別ものです。
スクリーン上の全てのタートルをリセットしその初期状態に戻します。
ノート
この TurtleScreen メソッドはグローバル関数としては resetscreen という名前でだけ使えます。 グローバル関数 reset は Turtle メソッドの reset から派生した別ものです。
パラメタ: |
|
---|
引数が渡されなければ、現在の (キャンバス幅, キャンバス高さ) を返します。 そうでなければタートルが描画するキャンバスのサイズを変更します。 描画ウィンドウには影響しません。 キャンバスの隠れた部分を見るためにはスクロールバーを使って下さい。 このメソッドを使うと、以前はキャンバスの外にあったそうした図形の一部を見えるようにすることができます。
>>> turtle.screensize(2000,1500)
# 逃げ出してしまったタートルを探すためとかね ;-)
パラメタ: |
|
---|
ユーザー定義座標系を準備し必要ならばモードを “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) # 正八角形
パラメタ: |
|
---|
描画の遅延(delay)をミリ秒単位で設定するかまたはその値を返します。 (これは概ね引き続くキャンバス更新の時間間隔です。) 遅延が大きくなると、アニメーションは遅くなります。
オプション引数:
>>> screen.delay(15)
>>> screen.delay()
15
パラメタ: |
|
---|
タートルのアニメーションをオン・オフし、描画更新の遅延を設定します。 n が与えられた場合、通常のスクリーン更新のうち 1/n しか実際に実行されません。 (複雑なグラフィックスの描画を加速するのに使えます。) 二つ目の引数は遅延の値を設定します(delay() も参照)。
>>> screen.tracer(8, 25)
>>> dist = 2
>>> for i in range(200):
... fd(dist)
... rt(90)
... dist += 2
TurtleScreen の更新を実行します。 トレーサーがオフの時に使われます。
RawTurtle/Turtle のメソッド speed() も参照して下さい。
TurtleScreen に(キー・イベントを収集するために)フォーカスします。 ダミー引数は listen() を onclick メソッドに渡せるようにするためのものです。
パラメタ: |
|
---|
fun を指定されたキーのキーリリース(key-release)イベントに束縛します。 fun が None ならばイベント束縛は除かれます。 注意: キー・イベントを登録できるようにするためには TurtleScreen はフォーカスを持っていないとなりません(listen() を参照)。
>>> def f():
... fd(50)
... lt(60)
...
>>> screen.onkey(f, "Up")
>>> screen.listen()
パラメタ: |
|
---|
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 から派生した別ものです。
パラメタ: |
|
---|
t ミリ秒後に fun を呼び出すタイマーを仕掛けます。
>>> running = True
>>> def f():
if running:
fd(50)
lt(60)
screen.ontimer(f, 250)
>>> f() ### タートルが歩き続けます
>>> running = False
パラメタ: |
|
---|
タートルのモード(“standard”, “logo”, “world” のいずれか)を設定してリセットします。 モードが渡されなければ現在のモードが返されます。
モード “standard” は古い turtle 互換です。 モード “logo” は Logo タートルグラフィックスとほぼ互換です。 モード “world” はユーザーの定義した「世界座標(world coordinates)」を使います。 重要なお知らせ: このモードでは x/y 比が 1 でないと角度が歪むかもしれません。
モード | タートルの向きの初期値 | 正の角度 |
---|---|---|
“standard” | 右 (東) 向き | 反時計回り |
“logo” | 上 (北) 向き | 時計回り |
>>> mode("logo") # タートルが北を向くようにリセットします
>>> mode()
"logo"
パラメタ: |
|
---|
色モード(colormode)を返すか、または 1.0 か 255 のどちらかの値に設定します。 設定した後は、色トリプルの r, g, b 値は 0 から cmode の範囲になければなりません。
>>> screen.colormode()
1.0
>>> screen.colormode(255)
>>> turtle.pencolor(240,160,80)
この TurtleScreen の Canvas を返します。 Tkinter の Canvas を使って何をするか知っている人には有用です。
>>> cv = screen.getcanvas()
>>> cv
<turtle.ScrolledCanvas instance at 0x010742D8>
現在使うことのできる全てのタートルの形のリストを返します。
>>> screen.getshapes()
["arrow", "blank", "circle", ..., "turtle"]
この関数を呼び出す三つの異なる方法があります:
name が gif ファイルの名前で shape が None: 対応する画像の形を取り込みます。
ノート
画像の形はタートルが向きを変えても 回転しません ので、 タートルがどちらを向いているか見ても判りません!
name が任意の文字列で shape が座標ペアのタプル: 対応する多角形を取り込みます。
name が任意の文字列で shape が (合成形の) Shape オブジェクト: 対応する合成形を取り込みます。
タートルの形を TurtleScreen の形リスト(shapelist)に加えます。 このように登録された形だけが shape(shapename) コマンドに使えます。
>>> screen.register_shape("turtle.gif")
>>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3)))
スクリーン上のタートルのリストを返します。
>>> for turtle in screen.turtles()
... turtle.color("red")
タートルウィンドウの高さを返します。
>>> screen.window_height()
480
タートルウィンドウの幅を返します。
>>> screen.window_width()
640
タートルグラフィックス(turtlegraphics)のウィンドウを閉じます。
スクリーン上のマウスクリックに bye() メソッドを束縛します。
設定辞書中の “using_IDLE” の値が False (デフォルトです) の場合、 さらにメインループ(mainloop)に入ります。 注意: もし IDLE が -n スイッチ(サブプロセスなし)付きで使われているときは、 この値は turtle.cfg の中で True とされているべきです。 この場合、IDLE のメインループもクライアントスクリプトから見てアクティブです。
メインウィンドウのサイズとポジションを設定します。 引数のデフォルト値は設定辞書に収められており、 turtle.cfg ファイルを通じて変更できます。
パラメタ: |
|
---|
>>> screen.setup (width=200, height=200, startx=0, starty=0)
# ウィンドウを 200×200 ピクセルにして, スクリーンの左上に
>>> screen.setup(width=.75, height=0.5, startx=None, starty=None)
# ウィンドウをスクリーンの 75% かける 50% にして, スクリーンの真ん中に
パラメタ: |
|
---|
ウインドウのタイトルを titlestring に設定します。
>>> screen.title("Welcome to the turtle zoo!")
パラメタ: |
|
---|
パラメタ: |
|
---|
上で説明した setbg() のようなスクリーン向けのメソッドを提供します。
TurtleScreen のサブクラスで 4つのメソッドが加わっています 。
パラメタ: |
|
---|
タートルたちが遊び回る場所として自動的に ScrolledCanvas を提供する Screen クラスによって使われます
パラメタ: |
|
---|
形をモデル化するデータ構造。 ペア (type_, data) は以下の仕様に従わなければなりません。
type_ | data |
---|---|
“polygon” | 多角形タプル、すなわち座標ペアのタプル |
“image” | 画像 (この形式は内部的にのみ使用されます!) |
“compound” | None (合成形は addcomponent() メソッドを使って作らなければなりません) |
パラメタ: |
|
---|
例:
>>> poly = ((0,0),(10,-5),(0,10),(-10,-5))
>>> s = Shape("compound")
>>> s.addcomponent(poly, "red", "blue")
# .. もっと成分を増やした後 register_shape() を使います
合成形の使用に関する補遺 を参照。
2次元ベクトルのクラスで、タートルグラフィックスを実装するための補助クラス。 タートルグラフィックスを使ったプログラムでも有用でしょう。 タプルから派生しているので、ベクターはタプルです!
以下の演算が使えます (a, b はベクトル、 k は数):
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 クラスのパブリックメソッドについて、 キーがメソッド名で値がドキュメント文字列である辞書を作るユーティリティがあります。
パラメタ: |
|
---|
ドキュメント文字列辞書(docstring-dictionary)を作って与えられたファイル名の Python スクリプトに書き込みます。 この関数はわざわざ呼び出さなければなりません (タートルグラフィックスのクラスから使われることはありません)。 ドキュメント文字列辞書は filename.py という Python スクリプトに書き込まれます。 ドキュメント文字列の異なった言語への翻訳に対するテンプレートとして使われることを意図したものです。
もしあなたが(またはあなたの生徒さんが) turtle を自国語のオンラインヘルプ付きで使いたいならば、ドキュメント文字列を翻訳してできあがったファイルをたとえば turtle_docstringdict_german.py という名前で保存しなければなりません。
さらに turtle.cfg ファイルで適切な設定をしておけば、 このファイルがインポート時に読み込まれて元の英語のドキュメント文字列を置き換えます。
この文書を書いている時点ではドイツ語とイタリア語のドキュメント文字列辞書が存在します。 ( glingl@aon.at にリクエストして下さい。)
初期デフォルト設定では古い 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
いくつかピックアップしたエントリーの短い説明:
turtle.cfg ファイルは turtle の保存されているディレクトリと現在の作業ディレクトリに追加的に存在し得ます。 後者が前者の設定をオーバーライドします。
Demo/turtle ディレクトリにも turtle.cfg ファイルがあります。 デモを実際に(できればデモビュワーからでなく)実行してそこに書かれたものとその効果を学びましょう。
ソース配布物の Demo/turtle ディレクトリにデモスクリプト一式があります。
内容は以下の通りです:
デモスクリプトは以下の通りです:
名前 | 説明 | 特徴 |
bytedesign | 複雑な古典的タートルグラフィックスパターン | tracer(), delay, update() |
chaos | verhust 力学系のグラフ化, コンピュータの計算がいかに信用ならないかを示します | 世界座標系 |
clock | コンピュータの時間を示すアナログ時計 | タートルが時計の針, ontimer |
colormixer | r, g, b の実験 | ondrag() |
fractalcurves | Hilbert & Koch 曲線 | 再帰 |
lindenmayer | 民俗的数学 (インド kolams) | L-システム |
minimal_hanoi | ハノイの塔 | ハノイ盤として正方形のタートル (shape, shapesize) |
paint | 超極小主義的描画プログラム | onclick() |
peace | 初歩的 | turtle: 見た目とアニメーション |
penrose | 凧と矢による非周期的タイリング | stamp() |
planet_and_moon | 重力系のシミュレーション | 合成形, Vec2D |
tree | (図形的) 幅優先木 (ジェネレータを使って) | clone() |
wikipedia | タートルグラフィックスについての wikipedia の記事の例 | clone(), undo() |
yingyang | もう一つの初歩的な例 | circle() |
楽しんでね!