turtle.ht()
Pythonの turtle
モジュールにおける turtle.ht()
(または単に ht()
) は、タートル(描画するアイコン)を画面から隠すための関数です。
もう少し詳しく説明します。
turtle.ht()
の機能
- 描画の終了時によく使われる
図形の描画が完了した後、最終的な絵だけを見せたい場合などに、タートルを隠す目的でよく使われます。 - 描画機能は維持される
タートルが非表示になっても、その描画機能は失われません。forward()
やcircle()
などのコマンドを実行すると、タートルは見えなくても線が描画されます。 - タートルを非表示にする
ht()
を呼び出すと、画面上に表示されているタートル(通常は矢印や古典的なタートルの形をしたアイコン)が見えなくなります。
使用例
import turtle
# タートルオブジェクトを作成
t = turtle.Turtle()
# タートルを動かして四角形を描画
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
# タートルを隠す
t.ht()
# 描画ウィンドウを開いたままにする
turtle.done()
このコードを実行すると、まずタートルが四角形を描画し、その後タートル自体は画面から消えます。描画された四角形だけが残ります。
- turtle.isvisible()
タートルが表示されているか(True)隠されているか(False)を返します。 - turtle.showturtle() (または st())
隠されたタートルを再び表示させます。
タートルが隠れない
これが最もよくある問題です。いくつかの原因が考えられます。
a. 複数のタートルオブジェクトが存在する場合
エラーの原因
コード内で複数の turtle.Turtle()
オブジェクトを作成しているにもかかわらず、turtle.ht()
のようにモジュールレベルの ht()
を呼び出している場合、それはデフォルトのタートルにのみ適用されます。自分で作成したタートルオブジェクトには影響しません。
例 (誤ったコード)
import turtle
t1 = turtle.Turtle()
t2 = turtle.Turtle() # もう一つのタートルを作成
t1.forward(50)
t2.circle(30)
turtle.ht() # デフォルトのタートルを隠そうとしている
turtle.done() # t1やt2は隠れない
トラブルシューティング
特定のタートルオブジェクトを隠したい場合は、そのオブジェクトのメソッドとして ht()
を呼び出す必要があります。
修正例
import turtle
t1 = turtle.Turtle()
t2 = turtle.Turtle()
t1.forward(50)
t2.circle(30)
t1.ht() # t1を隠す
t2.ht() # t2を隠す (必要であれば)
turtle.done()
もし import turtle
の代わりに from turtle import *
を使っている場合でも、複数のタートルオブジェクトを扱っている場合は、それぞれに対して ht()
を呼び出す必要があります。
b. turtle.done()
や mainloop()
の前に ht()
を呼び出しているか確認
エラーの原因
turtle
グラフィックは、描画が完了した後にウィンドウを保持するために turtle.done()
や turtle.mainloop()
を呼び出すのが一般的です。ht()
は描画が完了する前に呼び出されるべきです。もし、プログラムが終了した後や、ウィンドウが閉じられた後に ht()
を呼び出そうとしても効果はありません。
トラブルシューティング
タートルを隠したいタイミング(通常はすべての描画が完了した後)で ht()
を呼び出していることを確認してください。
c. タートルが一時的に隠れているだけの場合
エラーの原因
場合によっては、ht()
が機能しているものの、その後に showturtle()
(st()
) が呼び出されているか、別の処理でタートルが再表示されている可能性があります。
AttributeError: 'module' object has no attribute 'ht' または 'Turtle' object has no attribute 'ht'
エラーの原因
このエラーは、ht()
を呼び出す方法が間違っていることを示しています。
- AttributeError: 'Turtle' object has no attribute 'ht'
これは通常起こりませんが、タイプミスや、Pythonのバージョンが非常に古い、または環境が壊れている場合に発生する可能性があります。ht()
はTurtle
オブジェクトのメソッドとして存在します。 - AttributeError: 'module' object has no attribute 'ht'
これは通常、import turtle
を使用しているにもかかわらず、タートルオブジェクトのインスタンスを作成せずに直接turtle.ht()
を呼び出そうとした場合に発生します。turtle
モジュール自体にはht
という属性はありません。
トラブルシューティング
- タイプミスの確認
ht()
のスペルが正しいか、大文字・小文字が合っているか確認してください。Pythonは大文字・小文字を区別します。 - from turtle import * を使用している場合
この場合、ht()
は直接呼び出すことができますが、これはデフォルトのタートルに適用されます。
複数のタートルオブジェクトを扱う場合は、やはり個々のオブジェクトに対してfrom turtle import * forward(100) ht() # デフォルトのタートルを隠す done()
ht()
を呼び出す必要があります。from turtle import * t = Turtle() t.forward(100) t.ht() # tを隠す done()
- import turtle を使用している場合
タートルオブジェクトを作成し、そのオブジェクトに対してht()
を呼び出してください。
または、デフォルトのタートルを使用する場合は、import turtle my_turtle = turtle.Turtle() # タートルオブジェクトを作成 my_turtle.forward(100) my_turtle.ht() # 正しい呼び出し方 turtle.done()
turtle.hideturtle()
を使用します。import turtle turtle.forward(100) turtle.hideturtle() # 正しい呼び出し方 (デフォルトのタートル用) turtle.done()
エラーの原因
PyCharmなどの一部のIDEでは、turtle
モジュールが正常に動作しない、または画面がすぐに閉じてしまうなどの問題が発生することがあります。これはIDEの設定や、turtle
が使用するtkinter
の互換性に関連している場合があります。
トラブルシューティング
- Python/IDEの再インストール
稀に、PythonのインストールやIDEのインストールに問題がある場合に発生することもあります。 - 外部ターミナルでの実行
IDE内で問題が解決しない場合は、PyCharmのターミナルやコマンドプロンプト/ターミナルから直接スクリプトを実行してみてください (python your_script_name.py
)。これにより、IDE固有の問題かどうかが切り分けられます。 - インタープリタの確認
PyCharmで使用しているPythonインタープリタが正しく設定されているか確認してください。 - turtle.done() の使用
turtle.done()
は、描画ウィンドウが開いたままになるようにするために不可欠です。プログラムの最後に必ず追加してください。
turtle.ht()
のトラブルシューティングのポイントは以下の通りです。
- どのタートルを隠したいのか? デフォルトのタートルか、自分で作成した特定のタートルオブジェクトかを確認し、適切な方法で呼び出す。
- 呼び出すタイミングは適切か? 描画が完了し、かつプログラムが終了する前に呼び出されているか確認する。
- スペルや大文字・小文字のミスはないか?
turtle.done()
は使用されているか?
例1: 基本的な使用法 - 図形を描画し、タートルを隠す
これは ht()
の最も基本的な使い方です。図形を描画した後、タートルアイコンを非表示にします。
import turtle
# 画面とタートルオブジェクトのセットアップ
screen = turtle.Screen()
screen.setup(width=600, height=400) # ウィンドウサイズを設定
screen.bgcolor("lightgray") # 背景色を設定
pen = turtle.Turtle() # タートルオブジェクトを作成
pen.shape("turtle") # タートルの形を"turtle"に変更
pen.color("blue") # 色を青に設定
pen.speed(1) # 描画速度を最も遅く設定
# 四角形を描画
pen.forward(100)
pen.right(90)
pen.forward(100)
pen.right(90)
pen.forward(100)
pen.right(90)
pen.forward(100)
# 描画が終わったので、タートルを隠す
pen.ht() # または pen.hideturtle()
# 描画ウィンドウが開いたままになるようにする
turtle.done()
解説
import turtle
でモジュールをインポートします。turtle.Turtle()
でタートルオブジェクトpen
を作成します。pen.shape()
やpen.color()
,pen.speed()
でタートルの見た目や動きを設定します。pen.forward()
やpen.right()
で四角形を描画します。pen.ht()
を呼び出すと、画面上の青いタートルのアイコンが消えます。しかし、描画された四角形はそのまま残ります。turtle.done()
は、プログラム終了後もタートルグラフィックのウィンドウを開いたままにするために重要です。
例2: 複数のタートルと ht()
複数のタートルオブジェクトがある場合、それぞれに ht()
を適用する必要があります。
import turtle
screen = turtle.Screen()
screen.setup(width=600, height=400)
screen.bgcolor("lightblue")
# 最初のタートル (赤)
red_turtle = turtle.Turtle()
red_turtle.shape("arrow")
red_turtle.color("red")
red_turtle.penup() # ペンを上げて移動
red_turtle.goto(-100, 50)
red_turtle.pendown() # ペンを下ろして描画開始
red_turtle.circle(50) # 円を描画
# 2番目のタートル (緑)
green_turtle = turtle.Turtle()
green_turtle.shape("turtle")
green_turtle.color("green")
green_turtle.penup()
green_turtle.goto(100, -50)
green_turtle.pendown()
for _ in range(3): # 三角形を描画
green_turtle.forward(100)
green_turtle.left(120)
# それぞれのタートルを隠す
red_turtle.ht()
green_turtle.ht()
turtle.done()
解説
red_turtle
とgreen_turtle
という2つの異なるタートルオブジェクトを作成します。- それぞれが異なる図形(円と三角形)を描画します。
red_turtle.ht()
とgreen_turtle.ht()
をそれぞれ呼び出すことで、両方のタートルアイコンが非表示になります。もしどちらか一方しか呼ばなかった場合、もう一方は表示されたままになります。
例3: ht()
と st()
の組み合わせ - タートルの表示/非表示を切り替える
タートルを一時的に隠したり、再度表示したりする例です。
import turtle
import time # 時間遅延のためにtimeモジュールをインポート
screen = turtle.Screen()
screen.setup(width=600, height=400)
screen.bgcolor("white")
my_turtle = turtle.Turtle()
my_turtle.shape("classic") # クラシックな矢印形
my_turtle.color("purple")
my_turtle.speed(3)
# 描画開始
my_turtle.forward(100)
my_turtle.right(90)
# タートルを一時的に隠す
my_turtle.ht()
print("タートルが隠れました。2秒待ちます...")
time.sleep(2) # 2秒待つ
# タートルは隠れたままだが、描画は継続
my_turtle.forward(100)
my_turtle.right(90)
# タートルを再度表示する
my_turtle.st() # または my_turtle.showturtle()
print("タートルが再表示されました。2秒待ちます...")
time.sleep(2)
# 再び描画
my_turtle.forward(100)
my_turtle.right(90)
my_turtle.forward(100)
# 最終的にタートルを隠す
my_turtle.ht()
turtle.done()
解説
my_turtle.ht()
を呼び出すとタートルが消え、time.sleep(2)
で2秒間一時停止します。この間、タートルは隠れたままですが、my_turtle.forward(100)
を実行すると線は描画されます。my_turtle.st()
(またはmy_turtle.showturtle()
) を呼び出すと、隠れていたタートルが再び表示されます。- この例は、アニメーションなどでタートルの表示・非表示を制御する際に役立ちます。
from turtle import *
を使うと、turtle.
のプレフィックスなしで関数を呼び出すことができます。この場合、ht()
はデフォルトのタートルに適用されます。
from turtle import * # turtleモジュールからすべての名前をインポート
screen = Screen() # Screen()も直接呼び出せる
screen.setup(width=500, height=300)
screen.bgcolor("yellow")
# デフォルトのタートルを使って描画
forward(150)
right(90)
forward(100)
right(90)
forward(150)
# デフォルトのタートルを隠す
ht() # hideturtle() でも同じ
done()
from turtle import *
を使用しているため、forward()
,right()
,ht()
,done()
などを直接呼び出しています。- これらの関数は、
turtle
モジュールが内部的に管理しているデフォルトのタートルオブジェクトに対して作用します。 ht()
を呼び出すと、デフォルトのタートル(通常は最初から存在する矢印の形をしたもの)が隠れます。
Pythonの turtle.ht()
(または hideturtle()
) はタートル(描画アイコン)を隠すための標準的な方法ですが、状況によっては異なるアプローチを検討することもあります。直接的な代替というよりは、「タートルを隠す」という目的を達成するための別の考え方や関連する手法と捉えるのが適切です。
タートルを画面外に移動させる
これは直接的にタートルを「隠す」わけではありませんが、ユーザーの視界からタートルを外し、存在を意識させないようにする方法です。
方法
penup()
でペンを上げてから、goto()
や setx()
, sety()
などを使って画面の端(または描画領域外)にタートルを移動させます。
コード例
import turtle
screen = turtle.Screen()
screen.setup(width=600, height=400)
screen.bgcolor("lightgreen")
pen = turtle.Turtle()
pen.shape("turtle")
pen.color("blue")
pen.speed(1)
# 四角形を描画
pen.forward(100)
pen.right(90)
pen.forward(100)
pen.right(90)
pen.forward(100)
pen.right(90)
pen.forward(100)
# タートルを画面外に移動させて「隠す」
pen.penup() # ペンを上げて線が描かれないようにする
pen.goto(9999, 9999) # 画面の非常に遠くの座標に移動
turtle.done()
利点
- タートルが一時的に見えなくなるだけで、状態(向きや位置など)はそのまま保持される。
ht()
を知らなくても、タートルを視界から外すことができる。
欠点
- タートルの現在の位置を失う可能性がある(もし後で元の位置に戻したい場合)。
- 本当の意味で「隠す」わけではないため、画面サイズが非常に大きい場合や、タートルが移動する様子が一時的に見えてしまう可能性がある。
タートルの色を背景色と同じにする
これもタートルを「見えなくする」ための視覚的なトリックです。
方法
タートルの色 (color()
) を、画面の背景色 (bgcolor()
) と同じ色に設定します。
コード例
import turtle
screen = turtle.Screen()
screen.setup(width=600, height=400)
screen.bgcolor("white") # 背景色を白に設定
pen = turtle.Turtle()
pen.shape("arrow")
pen.color("red")
pen.speed(1)
# 円を描画
pen.circle(50)
# タートルの色を背景色と同じにして見えなくする
pen.color("white") # タートルの色を背景色と同じ白にする
turtle.done()
利点
- タートルの位置や向きは変わらない。
ht()
と同様に、タートルが画面から消えたように見える。
欠点
- 厳密にはタートルは存在しているので、その上に別のオブジェクトが重なると問題が起こる可能性はゼロではない(通常は問題ない)。
- 背景が複雑な模様や画像である場合、この方法は使えない。
- 背景色が変わると、タートルが再び見えてしまう。
turtle.clear() または screen.clear() で画面をクリアする
これはタートルを隠すというより、描画されたものをすべて消す方法です。結果的にタートルも表示されなくなりますが、これはタートルが隠れることによる副次的な効果です。
方法
screen.clear()
: 画面全体をクリアし、すべてのタートルを初期状態に戻します。turtle.clear()
: 特定のタートルが描画した線やスタンプを消去し、そのタートルを初期状態に戻します(タートル自体は隠れませんが、ht()
と組み合わせることが多い)。
コード例 (screen.clear() の使用)
import turtle
import time
screen = turtle.Screen()
screen.setup(width=600, height=400)
screen.bgcolor("lightgray")
my_turtle = turtle.Turtle()
my_turtle.shape("circle")
my_turtle.color("purple")
my_turtle.speed(1)
my_turtle.forward(100)
my_turtle.left(90)
my_turtle.forward(100)
time.sleep(2) # 2秒待機
# 画面全体をクリアし、描画もタートルもリセットされる
# 結果的にタートルも消える
screen.clear()
screen.bgcolor("white") # クリア後に背景色を再設定する必要がある
# 必要であれば、タートルを再度セットアップして描画を続ける
my_turtle.penup()
my_turtle.goto(-100, 0)
my_turtle.pendown()
my_turtle.forward(50)
turtle.done()
利点
- アニメーションのフレームごとに画面を更新する際などに利用できる。
- 画面上の不要な要素を完全にリセットできる。
欠点
- クリア後に描画を続けるには、タートルを再設定する必要がある場合が多い。
- タートルを「隠す」ことが主目的の場合、描画もすべて消えてしまうため、意図しない結果になることがある。
これは厳密な代替方法ではありませんが、プログラムがタートルを表示する前に、または表示した直後に強制的に終了させることで、ユーザーがタートルを見る機会をなくすことができます。
方法
turtle.done()
や screen.exitonclick()
を呼び出さずにプログラムを終了させる。
コード例
import turtle
pen = turtle.Turtle()
pen.forward(100)
# ここでプログラムが終了するため、ウィンドウは一瞬表示されるだけで、
# タートルを見る前に閉じられる可能性が高い。
# 実際には、環境によってはウィンドウが表示されない場合もある。
# turtle.done() を呼び出さないと、Pythonスクリプトの実行がすぐに完了する。
利点
- 非常に短いスクリプトの場合、タートルの表示が重要でなければ、余分なコードを記述する必要がない。
欠点
- 実用的なアニメーションやインタラクティブなプログラムでは使えない。
- デバッグが困難になる。
- 描画ウィンドウがすぐに閉じてしまうため、描画内容を確認できない。
turtle.ht()
は、タートルを画面から完全に非表示にするための最も直接的で推奨される方法です。上記で説明した代替方法は、特定の状況下で視覚的に同じ効果を達成するための工夫であり、それぞれに利点と欠点があります。
- プログラムの強制終了
ごく稀なケースで、タートルを見せる必要がない場合に限定的。 - clear()
画面全体をリセットしたい場合に有効。 - 背景色と一致
背景が単色で、一時的にタートルを消したい場合に手軽。 - 画面外への移動
タートルの位置を維持しつつ、視覚的に隠したい場合に有効。 - ht()
タートルアイコンの表示/非表示をシンプルに制御したい場合に最適。