適当のごった煮

Pythonと境界標とQGISを中心にいろいろと

Turtle graphicsを使う

スポンサードリンク

『The Python Standard Library』の24章からの抜粋です。メソッドはすべて簡略記法です。

目次

作図準備

まずはimportしてオブジェクトを作成し、このオブジェクトに対して操作を行っていきます。ペンの形は亀にします。

import turtle
t = turtle.Turtle()
t.shape('turtle') # shapeに指定できる値は、t.screen.getshapes()で取得可能

画面について

描画画面は以下のように、画面中心を原点(0, 0)としたxy平面で表され、右方向と上方向がそれぞれxとyのプラス方向で、x線上から反時計回り方向が角度のプラス方向になります。画面の大きさはt.screen.setup(width, height)で変更可能です。

f:id:tekito-gottani:20160929192749j:plain

基本の動作

動作メソッド
線を描く t.fd(distance)
後退 t.bk(distance)
点を描く t.dot(size=None, *color)
形を刻印するく t.stamp()
円を描く t.circle(radius, extent, steps)
角度変更(右回り) t.rt(angle)
角度変更(左回り) t.lt(angle)
場所移動 t.goto(x, y)
絶対角度の設定 t.seth(angle)
動く速さの変更 t.speed(speed)

状態を表示

動作メソッド
現在地の表示 t.pos()
原点からのx, y位置 t.xcor(), t.ycor()
現在向いている角度 t.heading()

ペンの制御

動作メソッド
ペンを下げる t.pd()
ペンを上げる t.pu()
サイズ変更 t.pensize(width), t.width(width)
色を変える t.pencolor(*args)
色を設定 t.color(*args)
描画を消す t.reset()
描画を消す(ペンの状態変更はしない) t.clear()
テキストを書く t.write(arg, move, align, font)

塗りつぶし

ペンの色と塗りつぶしの色を指定したうえで、begin_fillとend_fillで塗りつぶし対象図形の描画コードを囲みます。閉じた図形でなくても始点と終点を結ぶ範囲で塗りつぶされます。

t.color('black', 'lightyellow')
t.begin_fill()
for i in range(5):
    t.seth(90)
    t.fd(50)
    t.goto(50*(i+1), 0)
t.circle(100, 120)
t.end_fill()

これを実行すると、下のように閉じた図形でなくても始点と終点を結んでできる図を塗りつぶします。

f:id:tekito-gottani:20160929192920j:plain

亀の表示関連

動作メソッド
タートルを非表示、表示 t.ht(), t.st()
タートルの形を変える t.shape(name)
nameに指定できる値は、t.screen.getshapes()で取得可能

表示画面の制御

全てt.screenクラスのメソッドなので、使うときは、t.screen.○○○という形式で指定します。

動作メソッド
背景を変える t.screen.bgcolor(*args)
背景画像指定
画像形式はgifだけの模様
t.screen.bgcolor(picname)
画面の高さ t.screen.window_height()
画面の幅 t.screen.window_width()
画面の位置と大きさ t.screen.setup(width, height, startx, starty)
キーを押されたときに実行 t.screen.onkey(fun, key)
キーが離れたときに実行 t.screen.onkeyrelease(fun, key)
特定のキーが押されたときに実行 t.screen.onkeypress(fun, key=None)
画面上をクリックされたら実行 t.screen.onclick(fun, btn=1, add=None)
入力ウィンドウ表示 t.screen.textinput(title, prompt)

画面イベントを使う(onkey系)

onkey, onkeyrelease, onkeypressは、関連付ける関数を引数無しで定義し、t.screen.listen()ででキー操作を待ちます。

# t.screen.onkyeのテスト
# 「a」を6回押すと六角形ができる。亀が動いている途中に次の入力をすると動作が狂う

def fun():
    t.fd(100)
    t.lt(60)

t.screen.onkey(fun, 'a')
t.screen.listen() # キーイベントを待つ
# ここから後にt.fd(100)などのコードを書くと先に実行される

画面イベントを使う(onclick系)

onclick(onscreenclick)の場合は、関連付ける関数にクリックされた場所(x, y)を引数として定義します。

# t.screen.onclickのテスト
# クリックされた場所へ移動してクリックされた座標を表示する。亀が動いている途中に次の入力をすると動作が狂う

def fun(x, y):
    t.goto(x, y)
    t.write((x, y))

t.screen.onclick(fun)
# ここから後にt.fd(100)などのコードを書くと先に実行される

参考