turtle.color()

2025-06-06

turtle.color() の基本的な使い方と機能

この関数は、主に以下の2つの方法で使用されます。

  1. ペンと塗りつぶしの両方の色を設定する
    引数として1つの色を指定した場合、その色がペンの色(描画される線の色)と、次に begin_fill()end_fill() の間で描かれる図形の塗りつぶし色の両方に設定されます。

    import turtle
    
    t = turtle.Turtle()
    t.color("red") # ペンと塗りつぶしの両方を赤に設定
    t.forward(100)
    t.circle(50) 
    turtle.done()
    
  2. ペンと塗りつぶしの色を個別に設定する
    引数として2つの色を指定した場合、最初の色がペンの色に、2番目の色が塗りつぶしの色に設定されます。


    import turtle
    
    t = turtle.Turtle()
    t.color("blue", "yellow") # ペンを青、塗りつぶしを黄色に設定
    t.begin_fill()
    t.circle(50)
    t.end_fill()
    t.forward(100) # この線は青で描かれる
    turtle.done()
    

色の指定方法

turtle.color() で色を指定する方法はいくつかあります。

  • 16進数文字列(RGB)
    HTMLなどでも使われる、"#RRGGBB" 形式の16進数文字列で色を指定することもできます。


    t.color("#FF0000") # 赤
    t.color("#00FF00") # 緑
    t.color("#0000FF") # 青
    t.color("#FFA500") # オレンジ
    
  • RGB値(タプル)
    色のR(赤)、G(緑)、B(青)の成分を0から1、または0から255の範囲の数値で指定するタプル形式です。colormode() を使用して、この範囲を切り替えることができます。デフォルトは0から1です。

    • 0-1の範囲
      turtle.colormode(1.0) # デフォルトですが明示的に設定
      t.color((0.5, 0.2, 0.8)) # 例: 紫っぽい色
      
    • 0-255の範囲
      turtle.colormode(255)
      t.color((128, 51, 204)) # 上と同じ紫っぽい色
      
  • 色の名前(文字列)
    最も一般的な方法で、"red"(赤)、"blue"(青)、"green"(緑)、"yellow"(黄)、"black"(黒)、"white"(白)、"purple"(紫)、"orange"(オレンジ)など、よく知られている色の名前を文字列で指定できます。より多くの色の名前がサポートされています(例: "lightgreen", "darkblue"など)。


    t.color("purple")
    

color() メソッドの戻り値

引数なしで color() を呼び出すと、現在のペンと塗りつぶしの色が返されます。これは、現在の色を取得して後で再利用したい場合に便利です。


current_colors = t.color() # (ペンの色, 塗りつぶしの色) のタプルが返される
print(current_colors)


NameError: name 'turtle' is not defined または AttributeError: 'module' object has no attribute 'color'

これはPythonのモジュールやオブジェクトの扱いに関する最も一般的なエラーの一つです。

原因

  • turtle.Turtle() でタートルオブジェクトが作成されていない状態で turtle.color() を呼び出している。
  • turtle モジュールが正しくインポートされていない。

解決策

  • タートルオブジェクトを作成する
    turtle.color() は特定のタートル(ペン)の色を変更するメソッドなので、まずタートルオブジェクトを作成する必要があります。例えば、t = turtle.Turtle() のようにタートルオブジェクトを作成し、そのオブジェクトに対して t.color() を呼び出します。

    悪い例

    # import turtle はあるが、タートルオブジェクトがない
    import turtle
    turtle.color("red") # エラー: 'module' object has no attribute 'color'
    

    良い例

    import turtle
    t = turtle.Turtle()
    t.color("red") # 正しい
    

    または、関数型のインターフェースを使用する場合(turtle.color()はモジュールレベルの関数としても存在しますが、推奨はオブジェクト指向アプローチです):

    import turtle
    turtle.color("red") # デフォルトのタートルの色を変更
    
  • import turtle を忘れない
    コードの最初に import turtle を記述し、turtle モジュールをインポートしていることを確認してください。

TclError: unknown color name "..." または Bad color string: ...

色名の指定方法が間違っている場合に発生します。

原因

  • RGB値を正しく指定していない。
  • 色のスペルミス。
  • 存在しない色名を文字列で指定している。

解決策

  • RGB値を正しく指定する

    • タプルで指定する場合、各成分が0.0から1.0の浮動小数点数、または turtle.colormode(255) を設定している場合は0から255の整数であることを確認してください。
    • 16進数文字列で指定する場合、"#RRGGBB" の形式(例: "#FF0000")で、# を含み、6桁の16進数であることを確認してください。

    悪い例

    t.color("light-blue") # 不明な色名
    t.color((256, 0, 0))  # RGB値が範囲外(colormodeが1.0の場合)
    t.color("FF0000")     # # がない
    

    良い例

    t.color("lightblue")
    t.color((0.5, 0.7, 1.0)) # colormode(1.0) の場合
    turtle.colormode(255)
    t.color((128, 178, 255)) # colormode(255) の場合
    t.color("#00FF00")
    
  • スペルを確認する
    例えば "grean" ではなく "green" のように、正確なスペルであることを確認してください。

  • 正しい色名を使用する
    "red", "blue", "green", "yellow", "black", "white" など、turtle が認識する標準的な色の名前を使用してください。より多くの色の名前は、Tkinter(turtleが基盤としているグラフィックライブラリ)でサポートされている色名リストを参照できます。

TypeError: color() takes from 1 to 3 positional arguments but X were given

color() メソッドに渡す引数の数が間違っている場合に発生します。

原因

  • 期待される引数とは異なる型の引数を渡している場合。
  • color() に2つ以上の引数を渡しているのに、それらが色として解釈できない場合(例えば、色のタプルをさらにタプルで括ってしまった場合)。

解決策

  • タプルを二重にしない
    悪い例:
    t.color(("red", "green")) # 引数が1つとして扱われるが、色が2つあると解釈される
    
    良い例:
    t.color("red", "green") # ペンが赤、塗りつぶしが緑
    
  • 引数の数を調整する
    • 1つの色を指定する場合: t.color("red")
    • ペンと塗りつぶしの色を個別に指定する場合: t.color("blue", "yellow")
    • RGBタプルを指定する場合: t.color((0.5, 0.2, 0.8)) (これは1つの引数としてカウントされます)

色が適用されない、または期待通りの色にならない

コードはエラーなしで実行されるが、描画される色がおかしい、または色が変わらないというケースです。

原因

  • 既存の描画に色が遡って適用されると勘違いしている。
  • begin_fill()end_fill() を正しく使用していないため、塗りつぶしが機能しない。
  • color() の呼び出し位置が描画コマンドの前ではない。

解決策

  • 塗りつぶしには begin_fill() と end_fill() を正しく使う
    図形を塗りつぶしたい場合は、図形を描画するコードを t.begin_fill()t.end_fill() で囲む必要があります。
    t.color("red", "yellow") # ペンを赤、塗りつぶしを黄色に設定
    t.begin_fill()
    t.circle(50)
    t.end_fill()
    
    begin_fill() を呼び出す前に色を設定し、図形を閉じたら必ず end_fill() を呼び出すことを忘れないでください。そうしないと、塗りつぶしが行われなかったり、意図しない部分が塗りつぶされたりすることがあります。
  • color() は描画コマンドの前に置く
    turtle.color() は、その呼び出し以降に描画されるものに対して色を適用します。すでに描画されたものの色は変更しません。
    import turtle
    t = turtle.Turtle()
    
    t.forward(50) # デフォルト(黒)で描画される
    
    t.color("red") # ここから赤が適用される
    t.forward(50) # 赤で描画される
    
    t.color("blue", "yellow") # ここからペンは青、塗りつぶしは黄色
    t.begin_fill()
    t.circle(30)
    t.end_fill() # 黄色で塗りつぶされ、青い線で円が描かれる
    
    turtle.done()
    

これはPythonのモジュールシステムでよく起こる問題で、特に初心者が見落としがちです。

原因

  • 自分で作成したPythonファイルの名前が turtle.py となっている場合、Pythonは標準ライブラリの turtle モジュールではなく、自分のファイル(turtle.py)をインポートしようとします。しかし、そのファイルには turtle モジュールの機能がないため、AttributeError などが発生します。

解決策

  • スクリプトのファイル名を変更する
    my_turtle_drawing.pydrawing_app.py など、標準ライブラリの名前と衝突しない名前に変更してください。変更後、古い turtle.py ファイルを削除するか、別の場所に移動させて、Pythonが誤ってインポートしないようにします。


turtle.color()は、タートルオブジェクトに対して呼び出すメソッドです。

色の名前で指定する (ペンと塗りつぶし両方)

最もシンプルで一般的な使い方です。色の名前を文字列で指定します。この場合、ペンの色と塗りつぶしの色の両方が同じ色に設定されます。

import turtle

# 画面とタートルオブジェクトの準備
screen = turtle.Screen()
screen.setup(width=600, height=400) # 画面サイズを設定
t = turtle.Turtle()
t.speed(1) # 描画速度を少し遅くする (0が最速)

# 線の色を赤に設定して四角を描く
t.color("red") 
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)

# 少し移動して、色を変えて円を描く
t.penup() # ペンを上げる(線を描かずに移動)
t.goto(-150, 0)
t.pendown() # ペンを下げる(線を描く)

t.color("blue") # 線の色を青に設定
t.circle(50) # 青い線で円を描く

turtle.done() # 描画ウィンドウを維持

解説

  • t.color("blue") も同様に、線の色を青に設定します。
  • t.color("red") は、タートルtが次に描く線の色を赤に設定します。また、塗りつぶしを行う場合のデフォルトの色も赤になります。

色の名前で個別に指定する (ペンと塗りつぶし)

color()に2つの引数を渡すことで、ペンの色と塗りつぶしの色を別々に設定できます。最初の引数がペンの色、2番目の引数が塗りつぶしの色になります。

import turtle

screen = turtle.Screen()
screen.setup(width=600, height=400)
t = turtle.Turtle()
t.speed(1)

# ペンを緑、塗りつぶしを黄色に設定して塗りつぶし四角を描く
t.color("green", "yellow") 

# 塗りつぶしを開始
t.begin_fill() 
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.end_fill() # 塗りつぶしを終了

# 少し移動して、別の色で塗りつぶし円を描く
t.penup()
t.goto(150, 0)
t.pendown()

# ペンを紫、塗りつぶしをオレンジに設定
t.color("purple", "orange")
t.begin_fill()
t.circle(60)
t.end_fill()

turtle.done()

解説

  • t.begin_fill()t.end_fill() の間に描かれた図形(この場合は四角と円)が、color()で設定された塗りつぶし色で塗りつぶされます。
  • t.color("green", "yellow") は、線の色を緑に、塗りつぶしの色を黄色に設定します。

RGB値で指定する (タプル形式)

色をより細かく制御したい場合は、RGB (Red, Green, Blue) 値を使用できます。RGB値は0から1、または0から255の範囲で指定できます。デフォルトは0から1の範囲です。255スケールを使用したい場合は、turtle.colormode(255) を設定する必要があります。

a) 0.0から1.0の範囲で指定する場合 (デフォルト)

import turtle

screen = turtle.Screen()
screen.setup(width=600, height=400)
t = turtle.Turtle()
t.speed(1)

# colormodeはデフォルトで1.0なので、設定は不要ですが明示的に記述
turtle.colormode(1.0) 

# ペンの色を明るい赤(R=1.0, G=0.2, B=0.2)に設定
t.color((1.0, 0.2, 0.2)) 
t.forward(100)
t.left(120)
t.forward(100)
t.left(120)
t.forward(100) # 明るい赤で三角形を描く

# 少し移動して、ペンを濃い青、塗りつぶしを薄い緑に設定
t.penup()
t.goto(-150, -50)
t.pendown()

t.color((0.1, 0.1, 0.8), (0.7, 1.0, 0.7)) # 濃い青、薄い緑
t.begin_fill()
t.circle(50)
t.end_fill()

turtle.done()

b) 0から255の範囲で指定する場合

RGB値を0から255の整数で指定したい場合は、turtle.colormode(255) を呼び出す必要があります。

import turtle

screen = turtle.Screen()
screen.setup(width=600, height=400)
t = turtle.Turtle()
t.speed(1)

# colormodeを255に設定
turtle.colormode(255) 

# ペンを鮮やかなマゼンタ(R=255, G=0, B=255)に設定
t.color((255, 0, 255)) 
t.circle(70)

# 少し移動して、ペンをシアン、塗りつぶしをイエローに設定
t.penup()
t.goto(100, 50)
t.pendown()

t.color((0, 255, 255), (255, 255, 0)) # シアン、イエロー
t.begin_fill()
for _ in range(5): # 五角形を描く
    t.forward(80)
    t.right(72)
t.end_fill()

turtle.done()

解説

  • turtle.colormode(255) を設定することで、RGB値を0〜255の整数で指定できるようになります。これを設定しない場合、0〜1の浮動小数点数と見なされ、色が正しく表示されない可能性があります。

16進数文字列で指定する

ウェブデザインなどでよく使われる16進数形式 (#RRGGBB) で色を指定することもできます。

import turtle

screen = turtle.Screen()
screen.setup(width=600, height=400)
t = turtle.Turtle()
t.speed(1)

# ペンを濃いオレンジ、塗りつぶしを薄い水色に設定
t.color("#FFA500", "#ADD8E6") # オレンジ、ライトブルー

t.begin_fill()
t.circle(80)
t.end_fill()

# 少し移動して、ペンをダークグリーン、塗りつぶしをゴールドに設定
t.penup()
t.goto(-100, -80)
t.pendown()

t.color("#006400", "#FFD700") # ダークグリーン、ゴールド
t.begin_fill()
for _ in range(4): # 四角を描く
    t.forward(120)
    t.left(90)
t.end_fill()

turtle.done()

解説

  • t.color("#FFA500", "#ADD8E6") のように、# から始まる6桁の16進数文字列で色を指定します。各2桁がR, G, Bの成分を表し、00 が最小、FF が最大の色強度となります。

turtle.color() は非常に柔軟な色指定を可能にし、タートルグラフィックスでの表現の幅を広げます。

  • 16進数: "#" + RRGGBB 形式の文字列で指定。
  • RGB値: タプル (R, G, B) で指定。colormode(1.0) (デフォルト) なら0.0〜1.0、colormode(255) なら0〜255。
  • 二つ引数: t.color("ペンの色", "塗りつぶしの色") → ペンと塗りつぶしの色を個別に設定
  • 単一引数: t.color("色名") または t.color((R, G, B)) → ペンと塗りつぶしの両方の色を設定


turtle.color() の代替となる色設定メソッド

主に以下の2つのメソッドが turtle.color() の代替として考えられます。

  1. turtle.pencolor()
  2. turtle.fillcolor()

それぞれの詳細を見ていきましょう。

turtle.pencolor()

このメソッドは、タートルが描画する線(ペン)の色のみを設定します。塗りつぶしの色には影響を与えません。

主な用途

  • ペンの色と塗りつぶしの色を別々に、かつ明示的に設定したい場合。
  • 線の色だけを変更したい場合。

使い方
turtle.color() と同様に、色名(文字列)、RGB値(タプル)、または16進数文字列で色を指定できます。

コード例

import turtle

screen = turtle.Screen()
screen.setup(width=600, height=400)
t = turtle.Turtle()
t.speed(1)

# ペンの色を青に設定(塗りつぶしの色はデフォルトのまま)
t.pencolor("blue")
t.forward(100)
t.left(90)
t.forward(100)

# ペンの色をRGB値で設定
turtle.colormode(255) # RGB値を0-255で指定するために設定
t.pencolor((255, 165, 0)) # オレンジ色のRGB値
t.left(90)
t.forward(100)

# ペンの色を16進数で設定
t.pencolor("#800080") # 紫色
t.left(90)
t.forward(100)

turtle.done()

turtle.color() と turtle.pencolor() の違い

  • t.pencolor("red"):ペンだけが赤になり、塗りつぶしの色は以前の設定(またはデフォルト)のままです。
  • t.color("red"):ペンも塗りつぶしも赤になります。

turtle.fillcolor()

このメソッドは、タートルが begin_fill()end_fill() の間で描画する図形の塗りつぶし色のみを設定します。線の色には影響を与えません。

主な用途

  • ペンの色と塗りつぶしの色を別々に、かつ明示的に設定したい場合。
  • 図形の塗りつぶし色だけを変更したい場合。

使い方
turtle.color()turtle.pencolor() と同様に、色名(文字列)、RGB値(タプル)、または16進数文字列で色を指定できます。

コード例

import turtle

screen = turtle.Screen()
screen.setup(width=600, height=400)
t = turtle.Turtle()
t.speed(1)

# ペンの色はデフォルト(黒)のまま、塗りつぶしの色を赤に設定
t.fillcolor("red") 
t.begin_fill()
t.circle(50) # 黒い線で、赤く塗りつぶされた円
t.end_fill()

# 少し移動
t.penup()
t.goto(100, 0)
t.pendown()

# ペンの色はデフォルトのまま、塗りつぶしの色をRGB値で設定
turtle.colormode(1.0) # RGB値を0.0-1.0で指定するために設定
t.fillcolor((0.0, 1.0, 0.0)) # 緑色
t.begin_fill()
for _ in range(4): # 四角形を描く
    t.forward(80)
    t.right(90)
t.end_fill()

# 少し移動
t.penup()
t.goto(-100, -50)
t.pendown()

# ペンの色はデフォルトのまま、塗りつぶしの色を16進数で設定
t.fillcolor("#FFFF00") # 黄色
t.begin_fill()
t.dot(80) # ドット(塗りつぶされた円)を描画
t.end_fill() # 注:dot()は自動的に塗りつぶされるためbegin_fill/end_fillは通常不要ですが、ここではfillcolorの例として示しています。

turtle.done()

turtle.color() と turtle.fillcolor() の違い

  • t.fillcolor("red"):塗りつぶしだけが赤になり、ペンの色は以前の設定(またはデフォルト)のままです。
  • t.color("red"):ペンも塗りつぶしも赤になります。
  • turtle.pencolor() と turtle.fillcolor()

    • 明示性
      ペンと塗りつぶしの色を厳密に区別して設定したい場合に適しています。
    • 独立性
      片方の色だけを変更したい場合に、もう一方の色に影響を与えずに設定できます。
    • シンプルさ
      ペンと塗りつぶしの両方を同時に同じ色に設定したい場合、または毎回両方を設定するのが面倒な場合に最適です。
    • 汎用性
      1つまたは2つの引数で、両方の色を柔軟に設定できます。

組み合わせの例

import turtle

screen = turtle.Screen()
t = turtle.Turtle()
t.speed(1)

# ペンの色を黒、塗りつぶしの色を水色に設定
t.pencolor("black")
t.fillcolor("lightblue")

t.begin_fill()
t.circle(70) # 黒い線で、水色に塗りつぶされた円
t.end_fill()

# 少し移動
t.penup()
t.goto(0, -100)
t.pendown()

# ペンだけを赤に変える(塗りつぶしは水色のまま)
t.pencolor("red") 
t.circle(50) # 赤い線で、塗りつぶしなしの円

# 塗りつぶしだけを緑に変える(ペンは赤のまま)
t.fillcolor("lightgreen")
t.begin_fill()
t.square(100) # (仮のメソッド、四角形を描く一般的なコード)
# 上の行の代わりに、例えば以下のように四角形を描く
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)
t.end_fill() # 赤い線で、薄い緑に塗りつぶされた四角形

turtle.done()