Python 3.0 Hacks

第3回 turtleモジュールで図と戯れる

この記事を読むのに必要な時間:およそ 3 分

Python 2.5以前からある「turtle」モジュールが,Python 2.6/3.0からパワーアップしています。新しいturtleモジュールを利用すると,オブジェクト指向アプローチでさまざまなデータの可視化ができます。turtleモジュールはtkinterを利用しただけの単一モジュールになっており,140Kバイトもあります。すべての機能を紹介することはこのスペースでは無理ですので,主要な機能だけをダイジェストで紹介します。

プロッティング

このモジュールにおいて最も重要な「Turtleオブジェクト」はペンプロッタのような役割を持っています。

以下のコードで,Turtleオブジェクトを作成できます。

from turtle import *
t = Turtle()

ペンプロッタのような役割として,以下のメソッドがあります。

表1

メソッド 動作
t.penup() ペン先をキャンバスから離す
t.pendown() ペン先をキャンバスに置く
t.setpos(x, y) 任意の座標まで移動する
t.pencolor('red') 線の色を変更する
t.pensize(3) 線の太さを変更する
t.write('hello!') 現在位置のすぐ上に文字列を描画

ペンプロッタではペンの現在位置を保持して動作しますが,Turtleオブジェクトではさらに「向き」を保持しています。そして,Turtleオブジェクトが自ら動く以下のような指令も持っています。

表2

メソッド 動作
t.forward(10) 現在の向きに10距離前進する
t.left(10) 10度左に向きを変える
t.right(10) 10度右に向きを変える
t.circle(50,240) 回転半径50で270度の円弧を描くように進む

これらの指令は,turtleモジュールに定義されているTurtleクラスのインスタンスに対して使うのが普通ですが,turtleモジュールそのものに対して使う方法もあります。この場合,Turtleインスタンスを作らなくても自動的に作成してくれるようです。

サンプル1

リスト1のコードで陰陽太極図のようなマーク図1が描けます。

リスト1

from turtle import *
t = Turtle()      # タートルオブジェクト作成(初めて作るときはウインドウも作成されます)
t.circle(50,180)  # 反時計回り半径50で180度まで
t.circle(-50,180) # 時計回り半径50で180度まで
t.circle(-100)    # 時計回り半径100で360度まで
exitonclick()     # ウインドウクリックするまで待機

図1 リスト1の実行結果

図1 リスト1の実行結果

図形の塗りつぶしを行いたい場合は,リスト2のように「fillcolor」指定ののち一連の図形描画命令を「begin_fill()」「end_fill()」の2命令で囲んでください。

サンプル2 - 塗りつぶし

リスト2

from turtle import *
t = Turtle()
t.fillcolor('blue')
t.begin_fill()
t.setpos(-50,100)
t.setpos(50,100)
t.setpos(0,0)
t.end_fill()
exitonclick()

図2 リスト2の実行結果

図2 リスト2の実行結果

閉じた図形ではない場合は,始点と終点が接続されたように塗りつぶします。

著者プロフィール

入江田昇(いりえだ のぼる)

メカ整備やエレクトロニクス系の業務が長く,ロボットに関わることが多い。国のRTミドルウェアプロジェクトでPythonを強く推した張本人。Python/C++を中心に制御ソフトや業務支援ツールなどをよく作成している。自分でブログシステムを構築し,Pythonに関するサイトを運営しながらWeb系の勉強中。最近はFPGAロジックをPythonで書くのが楽しい。

コメント

コメントの記入