Turtleだけじゃない!Pythonでグラフィックプログラミングを学ぶ代替手段

2025-06-06

Pythonの「Tutorial (turtle)」は、Pythonの標準ライブラリであるturtleモジュールを使った、非常に楽しくて視覚的なプログラミング入門です。特に、プログラミング初心者や子供たちにとって、抽象的なコードの概念を理解するのに役立つように設計されています。

turtleモジュールとは?

turtleモジュールは、グラフィックを描画するための機能を提供します。想像してみてください、画面上に「カメ」がいて、そのカメが動く軌跡が線として描かれるのです。カメに「前に進め」「右に曲がれ」といった命令を与えることで、様々な図形や模様を描くことができます。これは、1960年代に教育目的で開発されたプログラミング言語「Logo」の概念に基づいています。

なぜ「Tutorial (turtle)」が初心者向けなのか?

  1. 視覚的なフィードバック
    コードを実行すると、すぐに画面上で結果が確認できます。これにより、自分の書いたコードが何をしているのかが直感的に理解できます。
  2. 簡単な命令
    カメを動かすための命令(例: forward(), right(), left())は、非常に分かりやすく、英語の単語そのままなので覚えやすいです。
  3. 抽象度の低さ
    変数やデータ構造といった複雑な概念にいきなり取り組むのではなく、まずは基本的なシーケンス(命令の順番)やループといったプログラミングの基礎を楽しく学べます。
  4. 創造性の促進
    決められた図形を描くだけでなく、自分で自由に想像力を働かせて、オリジナルの絵やアニメーションを作成することができます。

具体的な機能の例

turtleモジュールでよく使われる機能には以下のようなものがあります。

  • turtle.speed(speed): カメの描画速度を設定します(1から10、0は最速)。
  • turtle.circle(radius): 円を描画します。
  • turtle.pensize(width): ペンの太さを設定します。
  • turtle.pencolor(color): ペンの色を設定します(例: 'red', 'blue', '#FF0000')。
  • turtle.pendown(): ペンを下ろし、カメが動くと線を描画するようにします。
  • turtle.penup(): ペンを持ち上げ、カメが動いても線を描画しないようにします。
  • turtle.left(angle): カメを左に指定された角度だけ回転させます。
  • turtle.right(angle): カメを右に指定された角度だけ回転させます。
  • turtle.backward(distance): カメを指定された距離だけ後退させます。
  • turtle.forward(distance): カメを指定された距離だけ前進させます。

簡単なコード例

例えば、正方形を描くには以下のように書けます。

import turtle

# 画面とカメのセットアップ
screen = turtle.Screen()
t = turtle.Turtle()

# 正方形を描く
for _ in range(4): # 4回繰り返す
    t.forward(100) # 100ピクセル前進
    t.right(90)   # 右に90度回転

# 描画が終わるまで画面を開いたままにする
screen.mainloop()

このコードを実行すると、画面に白い正方形が描画されるのが見えます。

Pythonの公式ドキュメントにある「Tutorial (turtle)」では、これらの基本的な命令を使って、簡単な図形を描くことから始まり、ループ(繰り返し)や関数、さらにはイベント処理(クリックされたら何かをするなど)といった、より高度な概念へと徐々に進んでいきます。実際に手を動かしながらコードを書いて、その結果を目で見て確認することで、プログラミングの基礎を楽しく、かつ効果的に学ぶことができます。



SyntaxError(構文エラー)

これは最もよくあるエラーで、Pythonの文法規則に違反している場合に発生します。

一般的な原因

  • 全角文字の使用
    コードの中に全角スペースや全角の英数字が混ざっている場合。
  • 不適切なインデント
    Pythonはインデント(字下げ)によってコードブロックを識別します。誤ったインデントはIndentationErrorを引き起こすこともありますが、SyntaxErrorとして現れることもあります。
  • スペルミス
    関数名や変数名のスペルミス。
    # エラー例: forwardのスペルミス
    turtle.forwad(100) 
    
  • 括弧、引用符、コロンの閉じ忘れ
    ()[]{}''""の閉じ忘れや、forループやif文の後の:の忘れ。
    # エラー例: 閉じ括弧の忘れ
    turtle.forward(100 
    

トラブルシューティング

  • 全角文字の除去
    全角文字が混入していないか注意深く確認し、すべて半角に修正します。
  • インデントの統一
    半角スペースで統一し、タブとスペースを混在させないようにします。PythonのPEP 8ではスペース4つが推奨されています。
  • スペルチェック
    関数名や変数名が正確か、公式ドキュメントなどで確認します。
  • 括弧、引用符、コロンのペアチェック
    エディタの機能(対応する括弧をハイライト表示するなど)を活用して、ペアが正しく閉じられているか確認します。
  • エラーメッセージの確認
    SyntaxError: invalid syntax のように表示され、問題の行が示されます。その行の周辺をよく確認し、上記の原因に当てはまるものがないか探します。

NameError(名前エラー)

定義されていない変数や関数を使おうとした場合に発生します。

一般的な原因

  • import忘れ
    turtleモジュールを使用する前にimport turtleを忘れている。
    # エラー例: import忘れ
    # import turtle を書き忘れた場合
    t = turtle.Turtle() # NameError: name 'turtle' is not defined
    
  • 大文字と小文字の区別
    Pythonは大文字と小文字を区別しますturtle.Turtle()turtle.turtle()は全く異なるものです。
    # エラー例: 大文字と小文字の区別を間違える
    t = turtle.turtle() # 正しいのは turtle.Turtle()
    
  • 変数の未定義
    使用する前に変数を初期化していない。
  • 変数名のスペルミス
    my_turtleと定義したのにmyturtleと書いたなど。
    # エラー例: 変数名のスペルミス
    t = turtle.Turtle()
    te.forward(100) # 'te' は定義されていない
    

トラブルシューティング

  • import turtleの確認
    コードの先頭にimport turtleがあるか確認します。
  • 定義箇所の確認
    その変数や関数が使用される前に適切に定義(またはインポート)されているか確認します。
  • スペルと大文字/小文字の確認
    変数名や関数名が定義された通りに書かれているか、大文字と小文字を含めて正確に確認します。

AttributeError(属性エラー)

オブジェクトに存在しない属性(メソッドやプロパティ)にアクセスしようとした場合に発生します。これは、多くの場合、オブジェクトの種類を間違えているか、スペルミスが原因です。

一般的な原因

  • メソッド呼び出しの()忘れ
    メソッドは関数なので、引数がなくても()が必要です。
    # エラー例: メソッド呼び出しの括弧忘れ
    t = turtle.Turtle()
    t.forward # AttributeError: 'Turtle' object has no attribute 'forward' (これは関数オブジェクトそのものなので、関数呼び出しが必要です)
    
  • メソッド名のスペルミス
    t.forward()と書くべきところをt.forword()と書いたなど。
  • オブジェクトの種類の誤解
    例えば、turtle.Screen()オブジェクトに対して、turtle.Turtle()オブジェクトのメソッド(例: forward())を呼び出そうとする。
    # エラー例: Screenオブジェクトにforward()は存在しない
    screen = turtle.Screen()
    screen.forward(100) # AttributeError: 'Screen' object has no attribute 'forward'
    

トラブルシューティング

  • ()の確認
    メソッドを呼び出す際には、必ず()を付けているか確認します。
  • 公式ドキュメントの参照
    turtleモジュールの公式ドキュメントを参照し、使用したいメソッドやプロパティがそのオブジェクトに存在するか、正しいスペルで書かれているかを確認します。
  • エラーメッセージの確認
    AttributeError: 'TypeName' object has no attribute 'attribute_name' のように表示されます。TypeNameが意図したオブジェクトであるか確認し、attribute_nameのスペルが正しいか、そのオブジェクトにその属性が実際に存在するか確認します。

TypeError(型エラー)

関数やメソッドに、期待される型ではない引数を渡した場合に発生します。

一般的な原因

  • 引数の数が違う
    関数やメソッドが必要とする引数の数と、実際に渡した引数の数が異なる場合。
    # エラー例: 引数が足りない(または多すぎる)
    t.circle() # TypeError: circle() missing 1 required positional argument: 'radius'
    
  • 数値の代わりに文字列を渡す
    forward()right()などの引数に、数値であるべきところに文字列を渡してしまう。
    # エラー例: 数値の代わりに文字列を渡す
    t.forward("100") # TypeError: bad operand type for abs(): 'str' (または類似のエラーメッセージ)
    

トラブルシューティング

  • 引数の数の確認
    関数やメソッドがいくつの引数を必要とするか、公式ドキュメントなどで確認し、正しく引数を渡しているか確認します。
  • 引数の型の確認
    関数やメソッドの引数が、期待されるデータ型(整数、浮動小数点数など)であることを確認します。必要に応じてint()float()で型変換します。
  • エラーメッセージの確認
    TypeError: ... のように表示され、どのような型が問題であるか、または引数の数が問題であるかが示されます。

ModuleNotFoundError(モジュール見つからないエラー)

turtleモジュール自体が見つからない場合に発生します。これは稀ですが、Pythonのインストールに問題がある場合や、環境設定の問題で起こりえます。

一般的な原因

  • ファイル名の衝突
    自分で作成したPythonファイルの名前をturtle.pyにしてしまった場合。この場合、Pythonは標準のturtleモジュールではなく、自分で作成したturtle.pyを読み込もうとしてしまい、必要な関数が見つからずにエラーになります。
  • Pythonのインストール不良
    Pythonが正しくインストールされていないか、環境変数の設定が不適切。

トラブルシューティング

  • 環境変数の確認
    上級者向けですが、Pythonのパスが正しく設定されているか確認します。
  • ファイル名の変更
    もし自分でturtle.pyというファイルを作成していたら、必ず別の名前に変更してください(例: my_drawing.pyなど)。これは非常に一般的な落とし穴です。
  • Pythonの再インストール
    Pythonが正しくインストールされているか確認し、必要であれば再インストールを検討します。

ウィンドウが表示されない、またはすぐに閉じてしまう

これはエラーメッセージが出るわけではありませんが、初心者によくある問題です。

一般的な原因

  • IDLE以外の環境での実行
    一部のIDEやエディタでは、turtle.done()screen.mainloop()がなくてもウィンドウが保持されることがありますが、ターミナルから直接実行するとすぐに閉じる場合があります。
  • screen.mainloop()またはturtle.done()の忘れ
    turtleグラフィックスは、描画が完了した後もウィンドウを開いたままにするために、イベントループを開始する必要があります。これを忘れると、プログラムがすぐに終了し、描画されたウィンドウがすぐに閉じてしまいます。
    import turtle
    
    t = turtle.Turtle()
    t.forward(100)
    # これがないとすぐに閉じてしまう
    # turtle.done() または screen.mainloop() が必要
    

トラブルシューティング

  • コードの最後にscreen.mainloop()またはturtle.done()を追加する
    import turtle
    
    screen = turtle.Screen() # Screenオブジェクトを作成
    t = turtle.Turtle()
    
    t.forward(100)
    
    screen.mainloop() # または turtle.done()
    
    turtle.done()はより手軽ですが、より詳細なイベント処理を行う場合はscreen.mainloop()を使います。

カメが動かない、または描画が遅い

一般的な原因

  • ペンアップ状態
    turtle.penup()が呼び出されており、ペンが上がった状態になっている。
  • 速度設定
    turtle.speed()の引数が小さい(遅い)場合。
  • ペンダウンの確認
    描画したい場合はt.pendown()が呼び出されていることを確認します。
  • 速度の調整
    t.speed(0)(最速)やt.speed(10)(速い)などを試します。
    t.speed(0) # 最速
    # または
    t.speed(10) # 速い
    
  • 公式ドキュメントを参照する
    turtleモジュールの機能や引数について疑問があれば、Pythonの公式ドキュメントが最も正確な情報源です。
  • インターネット検索
    エラーメッセージをそのままコピーしてインターネットで検索すると、同じ問題に遭遇した他の人の解決策が見つかることが多いです。Stack OverflowなどのプログラミングQ&Aサイトが非常に役立ちます。
  • Printデバッグ
    変数の値を確認したい場所にprint()文を挿入して、実行中に値がどうなっているかを確認します。
  • こまめに実行して確認する
    少しコードを書いたらすぐに実行し、意図した通りに動くか確認する習慣をつけましょう。これにより、問題が発生したときに原因を特定しやすくなります。
  • コードをシンプルにする
    複雑なコードでエラーが出た場合、問題のある部分を特定するために、関係ない部分をコメントアウトしたり、最小限のコードに絞り込んでテストしたりします。
  • エラーメッセージを注意深く読む
    Pythonのエラーメッセージは、どこで何が間違っているかについての重要なヒントを含んでいます。特に、エラーの種類(NameError, TypeErrorなど)、ファイル名、行番号、そしてエラーの具体的な説明に注目してください。


turtleモジュールを使う前に、まずimport turtleでモジュールをインポートする必要があります。また、描画が終わった後にウィンドウがすぐに閉じないように、turtle.done()(またはscreen.mainloop())を最後に記述するのが一般的です。

基本的な直線と回転

最も単純な例として、カメを動かして線を描いてみましょう。

import turtle

# 1. スクリーンとカメのセットアップ
# Screenオブジェクトを作成すると、背景色などを設定できます。
screen = turtle.Screen()
screen.bgcolor("lightblue") # 背景色を薄い青に設定

# Turtleオブジェクト(カメ)を作成します。
t = turtle.Turtle() 
t.shape("turtle") # カメの形を「カメ」にする
t.color("red")    # ペンの色を赤に設定
t.pensize(2)      # ペンの太さを2に設定
t.speed(1)        # 描画速度を1(遅め)に設定。0が最速です。

# 2. カメを動かす
t.forward(100) # 100ピクセル前進
t.right(90)    # 右に90度回転
t.forward(50)  # 50ピクセル前進

# 3. 描画が終わるまで画面を開いたままにする
turtle.done() # または screen.mainloop()

解説

  • turtle.done(): turtleグラフィックウィンドウが開いたままになり、ユーザーが閉じるまでプログラムが終了しません。
  • t.right(角度): カメを現在の位置で右に指定された角度だけ回転させます。t.left(角度)は左に回転させます。
  • t.forward(距離): カメを現在の向きに指定された距離だけ前進させます。
  • t.speed(1): 描画速度を設定します。0(最速)、1(最も遅い)、1〜10(数字が大きいほど速い)で指定します。
  • t.pensize(2): 線の太さを設定します。
  • t.color("red"): カメが線を引く色を設定します。
  • t.shape("turtle"): カメのアイコンを実際のカメの形にします。他にも"arrow", "circle", "square", "triangle", "classic"などがあります。
  • turtle.Turtle(): カメのインスタンスを作成します。これを通してカメに命令を出します。
  • screen.bgcolor("lightblue"): 画面の背景色を設定します。
  • turtle.Screen(): 描画するキャンバス(画面)を作成し、設定を変更できるようにします。
  • import turtle: turtleモジュールを使用可能にします。

正方形を描く

繰り返し処理(ループ)を使って正方形を描いてみましょう。

import turtle

screen = turtle.Screen()
screen.bgcolor("lightgreen")
t = turtle.Turtle()
t.shape("arrow") # 形を矢印に
t.color("blue")  # 色を青に
t.pensize(3)
t.speed(5)       # 速度を少し速く

# 正方形を描く (4回繰り返す)
for _ in range(4): # アンダーバー(_)は、ループ変数を使わない場合に慣習的に使われます
    t.forward(150) # 150ピクセル前進
    t.right(90)    # 右に90度回転

turtle.done()

解説

  • for _ in range(4):: このループは、中に書かれたコードを4回繰り返します。正方形は4つの同じ辺と4つの同じ角で構成されるため、この繰り返し処理が非常に効率的です。

多角形を描く(N角形)

正方形の例を応用して、任意のN角形を描けるようにしてみましょう。

import turtle

screen = turtle.Screen()
screen.bgcolor("pink")
t = turtle.Turtle()
t.color("purple")
t.pensize(2)
t.speed(7)

num_sides = 6 # 描きたい多角形の辺の数 (例: 6は六角形)
side_length = 100 # 各辺の長さ
angle = 360 / num_sides # 各回転の角度

# 多角形を描く
for _ in range(num_sides):
    t.forward(side_length)
    t.right(angle)

turtle.done()

解説

  • angle = 360 / num_sides: どんな多角形でも、カメが元の向きに戻るためには合計で360度回転する必要があります。そのため、辺の数で360を割ることで、1つの辺を描いた後に回転すべき角度を計算できます。
  • num_sides: 描く多角形の辺の数を変数で定義します。

星形を描く

多角形の応用として、星形を描いてみましょう。星形は、カメが大きく回転しながら線を描くことで作成できます。

import turtle

screen = turtle.Screen()
screen.bgcolor("black") # 背景を黒に
t = turtle.Turtle()
t.color("yellow")   # 星の色を黄色に
t.pensize(3)
t.speed(0)          # 最速で描画

# 星形を描く(五芒星の場合)
for _ in range(5):
    t.forward(200)   # 200ピクセル前進
    t.right(144)     # 右に144度回転

turtle.done()

解説

  • 五芒星(ごぼうせい)を描く場合、各頂点で144度回転することで、全体として星形が描かれます。これは、360度を5つの頂点で2周するように回る(360 * 2 / 5 = 144)と考えると理解しやすいかもしれません。

色の塗りつぶしとランダムな動き

図形を色で塗りつぶしたり、ランダムな動きを取り入れたりする例です。

import turtle
import random # ランダムな値を使うためにimport

screen = turtle.Screen()
screen.bgcolor("white")
t = turtle.Turtle()
t.speed(0)
t.pensize(2)

# 円を塗りつぶして描く
t.penup()      # ペンを上げる(移動中に線を描かない)
t.goto(-150, 0) # 開始位置に移動
t.pendown()    # ペンを下ろす

t.color("green", "lightgreen") # ペン色を緑、塗りつぶし色を薄い緑に設定
t.begin_fill() # 塗りつぶしを開始
t.circle(80)   # 半径80の円を描く
t.end_fill()   # 塗りつぶしを終了

# ランダムな線を描く
t.penup()
t.goto(100, 0)
t.pendown()

for _ in range(50): # 50本のランダムな線を描く
    # ランダムな色を設定
    r = random.random() # 0.0から1.0の間の浮動小数点数を生成
    g = random.random()
    b = random.random()
    t.pencolor(r, g, b) # RGB値で色を設定

    t.forward(random.randint(10, 50)) # 10から50ピクセルランダムに前進
    t.right(random.randint(-180, 180)) # -180から180度の間でランダムに回転

turtle.done()

解説

  • random.randint(a, b): aからb(両端を含む)の間のランダムな整数を返します。
  • random.random(): 0.0から1.0未満のランダムな浮動小数点数を返します。
  • import random: Pythonの標準モジュールで、乱数を生成する機能を提供します。
  • t.begin_fill() / t.end_fill(): これらの間に描かれた図形は、t.fillcolor()で設定された色で塗りつぶされます。t.color(ペン色, 塗りつぶし色)のように一度に設定することも可能です。
  • t.goto(x, y): カメを指定された座標に移動させます。
  • t.penup() / t.pendown(): カメが移動する際に線を描くかどうかを制御します。penup()でペンを持ち上げ、pendown()でペンを下ろします。

関数を定義することで、同じパターンを繰り返したり、複雑なデザインを構築したりできます。

import turtle

screen = turtle.Screen()
screen.bgcolor("beige")
t = turtle.Turtle()
t.speed(0) # 最速
t.pensize(1)

# 花びらを描く関数
def draw_petal():
    t.circle(100, 60) # 半径100の円の60度分の弧を描く
    t.left(120)       # 左に120度回転
    t.circle(100, 60) # 同じく弧を描く

# 花を描く
t.color("red", "yellow")
t.begin_fill()
for _ in range(6): # 6枚の花びら
    draw_petal()
    t.left(60)     # 次の花びらのために60度回転
t.end_fill()

# 中心を描く
t.penup()
t.goto(0, -30) # 中心に移動
t.pendown()
t.dot(60, "brown") # 直径60の点を茶色で描く

turtle.done()
  • 関数を使うことで、コードが整理され、同じ処理を何度も書かずに済むようになります。
  • t.circle(半径, extent=角度): 指定された半径で円の一部(弧)を描きます。extent引数で描く角度を指定できます。
  • def draw_petal():: draw_petalという名前の関数を定義しています。この関数を呼び出すと、花びらの一部が描画されます。


turtleは手軽にグラフィックを描画できる一方で、より複雑なアプリケーションやインタラクティブなゲーム、高性能なグラフィック表現には限界があります。Pythonでグラフィックプログラミングを行うための他の選択肢をいくつか見ていきましょう。

Tkinter (標準ライブラリ)

turtleとの比較

  • 欠点
    • 見た目が古く感じる場合がある。
    • 複雑なレイアウトや高度なグラフィック表現には向かない。
    • 学習曲線はturtleよりも少し急になる。
  • 利点
    • Pythonの標準ライブラリなので、追加インストールが不要。
    • ボタン、テキストボックス、ラベルなどのウィジェット(GUI部品)を配置して、より本格的なデスクトップアプリケーションを作成できる。
    • イベント駆動型プログラミング(ボタンクリックなど)を学べる。
    • Canvasウィジェットを使えば、線、円、四角形などの図形を直接描画できる。

簡単なコード例 (Canvasで線を描く)

import tkinter as tk

def draw_line():
    canvas.create_line(50, 50, 150, 150, fill="blue", width=3) # x1, y1, x2, y2

root = tk.Tk() # ウィンドウを作成
root.title("Tkinter Drawing")

canvas = tk.Canvas(root, width=300, height=200, bg="white") # キャンバスを作成
canvas.pack()

draw_button = tk.Button(root, text="Draw Line", command=draw_line) # ボタンを作成
draw_button.pack()

root.mainloop() # イベントループを開始

Pygame (ゲーム開発ライブラリ)

turtleとの比較

  • 欠点
    • インストールが必要 (pip install pygame)。
    • turtleよりも概念が多く、学習曲線はかなり急になる。
    • GUIウィジェットの作成は苦手。
  • 利点
    • ゲーム開発に最適化されており、スプライト(画像)、アニメーション、サウンド、イベント処理(キーボード、マウス)などを簡単に扱える。
    • より高性能なグラフィック描画が可能。
    • プログラミングの概念(ループ、条件分岐、クラスなど)を実践的に学べる。
    • コミュニティが大きく、情報源も豊富。

簡単なコード例 (画面に四角形を描き、更新する)

import pygame

# Pygameの初期化
pygame.init()

# 画面の設定
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Pygame Simple Drawing")

# 色の定義
WHITE = (255, 255, 255)
RED = (255, 0, 0)

# ゲームループ
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 画面を白で塗りつぶす
    screen.fill(WHITE)

    # 赤い四角形を描画
    pygame.draw.rect(screen, RED, (50, 50, 100, 100)) # (x, y, width, height)

    # 画面を更新
    pygame.display.flip()

pygame.quit()

Matplotlib (データ可視化ライブラリ)

turtleとの比較

  • 欠点
    • インタラクティブなアプリケーションやゲーム開発には向かない。
    • リアルタイムな描画やアニメーションは可能だが、ゲームのようなフレームレートは期待できない。
    • インストールが必要 (pip install matplotlib)。
  • 利点
    • 高品質なグラフ(線グラフ、散布図、棒グラフなど)を簡単に作成できる。
    • 数学的なプロットや複雑なデータセットの可視化に非常に強力。
    • LaTeXのような美しいテキスト表現が可能。
    • 3Dプロットもサポート。

簡単なコード例 (シンプルな線グラフ)

import matplotlib.pyplot as plt
import numpy as np

# データの生成
x = np.linspace(0, 10, 100) # 0から10まで100個の点を生成
y = np.sin(x) # sinカーブのy値

# プロット
plt.plot(x, y, label='sin(x)', color='blue')
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.title('Simple Sine Wave')
plt.legend()
plt.grid(True) # グリッドを表示
plt.show() # グラフを表示

turtleとの比較

  • 欠点
    • インストールが必要 (pip install kivy)。
    • turtleやTkinterに比べて学習曲線がかなり急で、独特の概念(Kv言語など)を学ぶ必要がある。
    • ファイルサイズが大きくなる傾向がある。
  • 利点
    • 完全にクロスプラットフォームで、モバイルアプリ開発にも対応。
    • 直感的なGUIデザインが可能で、美しいユーザーインターフェースを構築できる。
    • タッチ入力、マルチタッチジェスチャーをサポート。
    • 独自のグラフィック命令セット(kivy.graphics)で低レベルの描画も可能。

簡単なコード例 (ボタンを表示する)

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout # レイアウトのために追加

class SimpleApp(App):
    def build(self):
        layout = BoxLayout(orientation='vertical') # 縦方向のレイアウト
        button = Button(text='Hello Kivy!', size_hint=(None, None), size=(200, 50))
        button.pos_hint = {'center_x': 0.5, 'center_y': 0.5} # 中央に配置
        layout.add_widget(button)
        return layout

if __name__ == '__main__':
    SimpleApp().run()
  • Flet
    PythonだけでWeb、デスクトップ、モバイルアプリケーションを開発できるフレームワーク。Flutterをベースにしており、モダンなUIを構築できます。
  • Dear PyGui
    GPUアクセラレーションを利用した、非常に高速なGUIライブラリ。主にデータサイエンスやツール開発で利用されます。
  • Pyglet
    OpenGLをベースにした、シンプルでPythonicなゲーム/マルチメディアライブラリ。Pygameよりも低レベルな描画が可能です。
  • PyQt / PySide
    QtというC++製の強力なGUIフレームワークのPythonバインディング。非常に高機能で美しいデスクトップアプリケーションを作成できますが、学習コストも高いです。

Pythonでグラフィックプログラミングを学ぶ際、turtleは最初のステップとして理想的ですが、目的や複雑さに応じて適切なツールを選択することが重要です。

  • クロスプラットフォームのモダンなGUIアプリ、モバイルアプリ
    Kivy (またはPyQt/PySide, Flet)
  • データ可視化、科学技術計算のグラフ描画
    Matplotlib
  • 2Dゲーム開発やインタラクティブなシミュレーション
    Pygame
  • 簡単なデスクトップGUIや基本的な図形
    Tkinter