Python Turtle入門: 初心者向けグラフィックプログラミングの第一歩
Pythonの「How to… (turtle)」とは?
「How to… (turtle)」は、Pythonの公式ドキュメントにあるチュートリアルの一つで、グラフィック描画モジュールであるturtle
(タートル)の使い方を学ぶためのガイドです。turtle
モジュールは、小学校のプログラミング教育などでもよく使われる、直感的で視覚的なプログラミング学習ツールです。
「タートル」と呼ばれる小さなカーソル(通常は三角形や矢印の形をしています)を動かし、その軌跡に沿って線を描いていくことで、様々な図形や模様を作成することができます。まるでロボットに命令を出し、床に絵を描かせるようなイメージです。
turtle
モジュールの基本的な使い方
turtle
モジュールを使う上で、主要な概念と基本的なコマンドをいくつかご紹介します。
-
- まず、
turtle
モジュールをインポートし、描画を行うための「タートル」オブジェクトと「スクリーン」オブジェクトを作成します。 import turtle
t = turtle.Turtle()
# タートルを作成screen = turtle.Screen()
# 描画するスクリーンを作成
- まず、
-
タートルの移動
- タートルを前進させるには
forward()
(またはfd()
)、後退させるにはbackward()
(またはbk()
)を使います。引数に移動するピクセル数を指定します。t.forward(100)
# 100ピクセル前進
- タートルの向きを変えるには
right()
(またはrt()
)とleft()
(またはlt()
)を使います。引数に回転する角度を度数で指定します。t.right(90)
# 右に90度回転
- タートルを前進させるには
-
ペンの操作
- タートルはデフォルトでペンが下りた状態(pendown)で、移動すると線を描きます。
- ペンを持ち上げるには
penup()
(またはpu()
)、ペンを下ろすにはpendown()
(またはpd()
)を使います。ペンを上げた状態で移動しても線は描かれません。t.penup()
# ペンを持ち上げるt.forward(50)
# 線を描かずに移動t.pendown()
# ペンを下ろす
-
ペンの設定
- ペンの色を変えるには
pencolor()
を使います。色の名前(例: "red", "blue")やRGB値で指定できます。t.pencolor("red")
- ペンの太さを変えるには
pensize()
(またはwidth()
)を使います。引数にピクセル数を指定します。t.pensize(5)
- ペンの色を変えるには
-
図形描画の例
- 例えば、正方形を描くには、以下のように繰り返し処理を使います。
import turtle t = turtle.Turtle() for _ in range(4): # 4回繰り返す t.forward(100) t.right(90) turtle.done() # 描画ウィンドウを開いたままにする
- 例えば、正方形を描くには、以下のように繰り返し処理を使います。
「How to… (turtle)」の学習内容
このチュートリアルでは、上記のような基本的な操作に加え、以下のような内容を段階的に学ぶことができます。
- 関数とモジュール化
複雑な図形を描くための関数を定義し、コードを整理する方法。 - イベント駆動型プログラミングの基礎
マウスクリックやキーボード入力に反応してタートルを動かす方法。 - 色の使い方
線の色や塗りつぶしの色を設定する方法。 - ループと繰り返し
for
ループなどを使って、繰り返しパターンを描く方法。 - 基本的な動きと描画
直線、角、単純な図形の描画。
- 基礎的なプログラミング概念の学習
ループ、条件分岐、関数、変数といったプログラミングの基本的な概念を自然に学ぶことができます。 - 創造性の育成
自由な発想で様々な図形やアニメーションを作成でき、創造性を育みます。 - 直感的な操作
「進む」「曲がる」といった指示は、日常生活での行動に近く、直感的に理解できます。 - 視覚的フィードバック
コードを実行するとすぐに結果が視覚的に表示されるため、プログラミングの概念を理解しやすいです。
Python turtle
の一般的なエラーとトラブルシューティング
ウィンドウが表示されない、すぐに閉じてしまう
これはturtle
を使う上で最も頻繁に遭遇する問題の一つです。
-
解決策
- プログラムの最後に
turtle.done()
またはscreen.exitonclick()
を追加します。turtle.done()
:turtle
グラフィックのメインループを開始します。これによりウィンドウが開いたままになり、プログラムが終了するまで閉じません。screen.exitonclick()
: ユーザーが描画ウィンドウをクリックするまでウィンドウを開いたままにします。クリックするとウィンドウが閉じます。
例
import turtle t = turtle.Turtle() t.forward(100) t.right(90) # どちらか一方を追加 turtle.done() # または # screen = turtle.Screen() # screen.exitonclick()
- プログラムの最後に
-
- プログラムがタートル描画を終えた後、描画ウィンドウを閉じずに待機する命令がないため、スクリプトの実行が終了すると同時にウィンドウも閉じられてしまう。
NameError: name 'turtle' is not defined または NameError: name 'Screen' is not defined など
これは、変数名やモジュールのインポートに関するエラーです。
-
解決策
- プログラムの先頭で
import turtle
を記述しているか確認します。 - タートルオブジェクトは
turtle.Turtle()
、スクリーンオブジェクトはturtle.Screen()
で作成し、変数に代入しているか確認します。t = turtle.Turtle()
screen = turtle.Screen()
- これらのオブジェクトのメソッド(例:
t.forward()
、screen.bgcolor()
)を呼び出す際に、正しい変数名を使用しているか確認します。
例
import turtle # 正しい例 my_turtle = turtle.Turtle() my_screen = turtle.Screen() my_turtle.forward(50) my_screen.bgcolor("lightblue") turtle.done()
- プログラムの先頭で
-
エラーの原因
turtle
モジュールを正しくインポートしていない。- タートルオブジェクトやスクリーンオブジェクトを変数に代入していない、または間違った変数名を使っている。
AttributeError: 'module' object has no attribute 'forward' など
これは、間違ったオブジェクトに対してメソッドを呼び出している場合に発生します。
-
解決策
- タートルの移動や描画に関する操作は、作成したタートルオブジェクトに対して行います。
- 例:
turtle.forward(100)
は間違いで、my_turtle.forward(100)
が正しいです。
例
import turtle # 正しいタートルオブジェクトの作成 t = turtle.Turtle() # タートルオブジェクトのメソッドを呼び出す t.forward(100) t.right(90) turtle.done()
-
エラーの原因
- タートルオブジェクトの代わりにモジュール名(
turtle
)を使ってメソッドを呼び出そうとしている。
- タートルオブジェクトの代わりにモジュール名(
TypeError: ... takes exactly ... arguments (... given) または TypeError: ... missing ... required positional arguments
関数の引数の数が合わない場合に発生します。
-
解決策
- エラーメッセージに示されている関数(例:
forward()
,circle()
,color()
など)の引数を確認し、正しい数と型の引数を渡しているか確認します。 - 例えば、
forward()
は引数に数値(移動量)を期待しますが、forward("100")
のように文字列を渡すとエラーになります。
例
import turtle t = turtle.Turtle() # 正しい引数 t.forward(100) t.circle(50) # 半径50の円 # 間違った引数(例: forward()に文字列を渡す) # t.forward("100") # TypeErrorが発生 # 間違った引数(例: circle()に引数を渡さない) # t.circle() # TypeErrorが発生 turtle.done()
- エラーメッセージに示されている関数(例:
-
エラーの原因
- 関数やメソッドに渡す引数の数が足りない、または多すぎる。
- 引数の型が間違っている(例: 数値を期待しているところに文字列を渡している)。
.pyファイルの名前をturtle.pyにしてしまった
これは非常に一般的なミスで、予測しにくいエラーを引き起こします。
- 解決策
turtle.py
というファイル名を、my_turtle_drawing.py
やshapes.py
など、turtle
以外の名前に変更してください。- 変更後、古い
.pyc
ファイルが残っている場合は、それも削除するとより確実です(通常は自動的に再生成されますが、念のため)。
- エラーの原因
- 作成したPythonスクリプトの名前を
turtle.py
とすると、Pythonインタープリタが標準ライブラリのturtle
モジュールではなく、作成した自身のファイルをインポートしようとします。そのため、turtle
モジュールが提供する機能が使えなくなり、AttributeError
などのエラーが発生します。
- 作成したPythonスクリプトの名前を
コードがフリーズする、応答しなくなる (Not Responding)
プログラムが無限ループに陥っている場合や、非常に時間がかかる処理を実行している場合に起こります。
- 解決策
- 無限ループがないかコードを確認します。特にイベントハンドラ(
screen.listen()
,screen.onkey()
など)を使う場合は、メインループ(turtle.done()
やscreen.mainloop()
)を適切に呼び出す必要があります。 - 複雑な描画の場合は、
turtle.tracer(0)
とscreen.update()
を組み合わせて描画を高速化することを検討します。これにより、描画過程が見えなくなりますが、最終的な結果がすぐに表示されます。import turtle t = turtle.Turtle() screen = turtle.Screen() screen.tracer(0) # 自動描画をオフにする # 非常に多くの描画処理 for i in range(360): t.forward(1) t.right(1) screen.update() # 描画を更新する turtle.done()
- 無限ループがないかコードを確認します。特にイベントハンドラ(
- エラーの原因
while True:
のような無限ループを意図せず使っている。- 描画処理が非常に複雑で、コンピュータのリソースを大量に消費している。
turtle.done()
やscreen.exitonclick()
を呼び出していないため、プログラムが終了せずに待機状態になっている。
インデントエラー (IndentationError)
Pythonはインデント(字下げ)によってコードブロックを識別するため、インデントのミスはエラーになります。
- 解決策
- Pythonでは通常、スペース4つでインデントします。エディタの機能を使ってインデントを自動整形するか、手動で正しくインデントし直してください。
- 特にコピー&ペーストしたコードはインデントが崩れやすいので注意が必要です。
- エラーの原因
for
ループ、if
文、関数定義などで、期待されるインデントがされていない。- スペースとタブが混在している(非推奨)。
- オンラインで検索する
エラーメッセージをそのままGoogle検索すると、同じ問題に遭遇した他の開発者からの解決策が見つかることが多いです。特にStack Overflowなどのサイトは有用です。 - ドキュメントを参照する
turtle
モジュールの公式ドキュメントは、各関数の正しい使い方や引数について詳細な情報を提供しています。 - 一つずつ変更する
問題解決のためにコードを変更する際は、一度に複数の変更を加えないようにします。一つずつ変更し、その都度テストすることで、どの変更が問題を解決したか(または新たな問題を引き起こしたか)が分かります。 - コードをシンプルにする
複雑なコードでエラーが出たら、問題のある部分を特定するために、最小限の機能を持つコードに単純化して実行してみます。
基本的な四角形を描く
最も基本的な例です。タートルを動かし、線を描く方法を学びます。
import turtle
# 1. 描画するためのスクリーンオブジェクトを作成
screen = turtle.Screen()
screen.setup(width=600, height=400) # ウィンドウサイズを設定
screen.bgcolor("lightblue") # 背景色を設定
screen.title("四角形を描く") # ウィンドウのタイトルを設定
# 2. タートルオブジェクトを作成
my_turtle = turtle.Turtle()
my_turtle.shape("turtle") # タートルの形をカメにする
my_turtle.color("darkgreen") # タートルの色を濃い緑にする
my_turtle.pensize(3) # ペンの太さを3ピクセルにする
my_turtle.speed(1) # 描画速度を設定 (1: 最も遅い, 10: 速い, 0: 最も速い)
# 3. 四角形を描く
for _ in range(4): # 4回繰り返す
my_turtle.forward(100) # 100ピクセル前進
my_turtle.right(90) # 右に90度回転
# 4. 描画ウィンドウを閉じるまで待機
turtle.done()
解説
turtle.done()
: 描画が終了した後もウィンドウを開いたままにするために必要です。これにより、ユーザーが手動でウィンドウを閉じるまで表示されます。for _ in range(4):
: 四角形は4つの辺と4つの角でできているため、この操作を4回繰り返します。my_turtle.right(90)
: タートルが右に90度回転します。移動はしません。my_turtle.forward(100)
: タートルが向いている方向に100ピクセル進みます。線が描かれます。turtle.Turtle()
: 実際に描画を行う「タートル」を作成します。screen.bgcolor()
: 背景色を設定します。screen.setup()
: ウィンドウのサイズを設定します。turtle.Screen()
: 描画を行うための画面(ウィンドウ)を作成します。import turtle
:turtle
モジュールをインポートします。
星形を描く(ループと角度の応用)
ループと角度を組み合わせることで、複雑な図形も簡単に描けます。
import turtle
screen = turtle.Screen()
screen.setup(width=500, height=500)
screen.bgcolor("black")
screen.title("星形を描く")
star_turtle = turtle.Turtle()
star_turtle.pencolor("gold") # ペンの色を金色にする
star_turtle.pensize(2)
star_turtle.speed(0) # 最も速い速度で描画
# 星形を描く
for i in range(5): # 5つの突起を持つ星の場合、5回繰り返す
star_turtle.forward(150) # 各辺の長さ
star_turtle.right(144) # 360 / 5 = 72度ですが、内角で交差させるため144度回転
turtle.done()
解説
- 星形を描く際のポイントは、タートルを回転させる角度です。一般的な五芒星の場合、外側に144度回転させながら直線を引くことで描画できます。
色と塗りつぶしを使った円
color()
, fillcolor()
, begin_fill()
, end_fill()
を使って、色付きの図形を描きます。
import turtle
screen = turtle.Screen()
screen.setup(width=600, height=600)
screen.bgcolor("white")
screen.title("塗りつぶし円")
circle_turtle = turtle.Turtle()
circle_turtle.shape("circle") # タートルの形を円にする
circle_turtle.pencolor("blue") # 線の色
circle_turtle.fillcolor("red") # 塗りつぶしの色
circle_turtle.pensize(3)
circle_turtle.speed(3)
# 円を描画する前にペンを動かす(中心から描画開始)
circle_turtle.penup()
circle_turtle.goto(0, -100) # 円の下端がY=0になるように移動
circle_turtle.pendown()
# 塗りつぶしを開始
circle_turtle.begin_fill()
circle_turtle.circle(100) # 半径100ピクセルの円を描く
# 塗りつぶしを終了
circle_turtle.end_fill()
turtle.done()
解説
circle_turtle.end_fill()
: 塗りつぶしを確定させます。circle_turtle.begin_fill()
: これを呼び出した後に描かれた線で囲まれた領域が、fillcolor()
で設定した色で塗りつぶされます。circle_turtle.penup()
とcircle_turtle.pendown()
: 線を描かずにタートルを移動させたいときに使います。circle()
は現在の位置から描画を開始するため、円の中心を調整するためにペンを持ち上げて移動しています。
関数を使った複雑な図形(花)
関数を定義して繰り返し使うことで、より複雑なパターンを効率的に描けます。
import turtle
def draw_petal(some_turtle, radius, angle):
"""
花びらを一つ描く関数
:param some_turtle: 使用するタートルオブジェクト
:param radius: 円弧の半径
:param angle: 円弧の角度
"""
some_turtle.circle(radius, angle) # 半径radiusの円弧をangle度描く
some_turtle.left(180 - angle) # 円弧の終点から次の円弧の開始点へ向くように回転
some_turtle.circle(radius, angle)
some_turtle.left(180 - angle)
screen = turtle.Screen()
screen.setup(width=700, height=700)
screen.bgcolor("lightgreen")
screen.title("花を描く")
flower_turtle = turtle.Turtle()
flower_turtle.shape("arrow")
flower_turtle.color("red", "yellow") # ペンの色と塗りつぶしの色
flower_turtle.speed(0) # 最速
flower_turtle.pensize(2)
# 花の中心に移動
flower_turtle.penup()
flower_turtle.goto(0, -150)
flower_turtle.pendown()
# 花びらを描くループ
for _ in range(6): # 6枚の花びらを持つ花
flower_turtle.begin_fill()
draw_petal(flower_turtle, 100, 60) # 半径100、角度60度の花びらを描画
flower_turtle.end_fill()
flower_turtle.right(60) # 次の花びらのためにタートルを回転
# 花の中心を描画
flower_turtle.penup()
flower_turtle.goto(0, 0) # 中心に戻る
flower_turtle.pendown()
flower_turtle.dot(50, "orange") # 直径50のオレンジ色の点を描く
turtle.done()
解説
flower_turtle.dot(size, color)
: 指定されたサイズと色の点(塗りつぶされた円)を描きます。flower_turtle.color("red", "yellow")
: このように2つの引数を渡すと、1つ目はペンの色、2つ目は塗りつぶしの色として設定されます。some_turtle.circle(radius, angle)
: 特定の角度分の円弧を描くことができます。
イベント処理(キーボード操作でタートルを動かす)
turtle
はイベント処理にも対応しており、ユーザーの操作に応じてタートルを動かすことができます。
import turtle
screen = turtle.Screen()
screen.setup(width=500, height=500)
screen.bgcolor("grey")
screen.title("キーボード操作でタートルを動かす")
player_turtle = turtle.Turtle()
player_turtle.shape("turtle")
player_turtle.color("green")
player_turtle.penup() # 線を描かずに移動するためペンアップ
# キーボードイベントに対応する関数を定義
def move_forward():
player_turtle.forward(10)
def turn_left():
player_turtle.left(30)
def turn_right():
player_turtle.right(30)
def clear_drawing():
player_turtle.clear() # 描画された線を全て消去
player_turtle.penup()
player_turtle.home() # 開始位置に戻る
player_turtle.pendown()
def toggle_pen():
if player_turtle.isdown(): # ペンが下りているか確認
player_turtle.penup()
else:
player_turtle.pendown()
# キーボードイベントリスナーを設定
screen.listen() # キーボード入力を受け付けるようにする
screen.onkey(move_forward, "Up") # 上矢印キーで前進
screen.onkey(turn_left, "Left") # 左矢印キーで左回転
screen.onkey(turn_right, "Right") # 右矢印キーで右回転
screen.onkey(clear_drawing, "c") # 'c'キーで描画をクリア
screen.onkey(toggle_pen, "space") # スペースキーでペンアップ/ダウンを切り替え
# メインループを開始 (イベント待機)
screen.mainloop() # イベントループを実行。これによりウィンドウが開きっぱなしになる
screen.mainloop()
:turtle.done()
と似ていますが、特にイベント処理を行う場合に推奨されるメインループです。これにより、プログラムが終了せずにイベントを待ち続けます。player_turtle.isdown()
: ペンが下りているかどうかをブール値で返します(True
またはFalse
)。player_turtle.home()
: タートルを開始位置(画面中央の(0,0))に戻し、向きもリセットします。player_turtle.clear()
: タートルが描いた全ての線を消去します。タートルの位置や向きは変わりません。player_turtle.penup()
/player_turtle.pendown()
: 線を描かずに移動したり、描画を開始したりするために使います。screen.onkey(関数名, キー名)
: 指定されたキーが押されたときに、対応する関数を呼び出すように設定します。キー名は大文字小文字を区別します(例: "Up", "Left", "Right", "a", "b", "space"など)。screen.listen()
: ウィンドウがキーボード入力を「聞く」状態にします。
Python turtle
の代替プログラミング手法・ライブラリ
turtle
は「タートルグラフィックス」という概念に基づいた教育用ツールであり、そのシンプルさが強みです。しかし、より複雑な描画やインタラクティブな要素、パフォーマンスを求める場合は、以下のような選択肢があります。
Tkinter (ティキンター)
- 例(TkinterのCanvasで線を描く):
import tkinter as tk root = tk.Tk() root.title("Tkinter Canvasで線を描く") canvas = tk.Canvas(root, width=400, height=300, bg="white") canvas.pack() # 線を描く (x1, y1, x2, y2) canvas.create_line(50, 50, 150, 50, fill="red", width=2) canvas.create_line(150, 50, 150, 150, fill="blue", width=2) canvas.create_line(50, 150, 150, 150, fill="green", width=2) canvas.create_line(50, 50, 50, 150, fill="purple", width=2) root.mainloop()
- turtleとの比較
- 得意なこと
ボタン、テキストボックス、メニュー、ラベルなどのGUI要素を配置して、デスクトップアプリケーションを作成することに優れています。turtle
のように「タートルを動かす」という抽象的な概念ではなく、ピクセル座標を直接指定して描画する「Canvas」ウィジェットも利用できます。 - 難易度
turtle
よりは複雑ですが、GUIフレームワークの中では比較的学習しやすい部類に入ります。 - 用途
小規模なデスクトップアプリケーション、シンプルなGUIツール、データ入力フォームなど。
- 得意なこと
Pygame (パイゲーム)
- 例(Pygameでシンプルな四角形を動かす):
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で動く四角形") # 色の定義 WHITE = (255, 255, 255) RED = (255, 0, 0) # 四角形の設定 rect_x = 50 rect_y = 50 rect_width = 50 rect_height = 50 rect_speed = 5 running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # キーイベント処理 if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: rect_x -= rect_speed if event.key == pygame.K_RIGHT: rect_x += rect_speed if event.key == pygame.K_UP: rect_y -= rect_speed if event.key == pygame.K_DOWN: rect_y += rect_speed # 画面を白で塗りつぶす screen.fill(WHITE) # 四角形を描画 pygame.draw.rect(screen, RED, (rect_x, rect_y, rect_width, rect_height)) # 画面を更新 pygame.display.flip() pygame.quit()
- turtleとの比較
- 得意なこと
高速なグラフィック描画、スプライト(画像)の管理、衝突判定、キーボードやマウス入力への柔軟な対応、サウンド再生など、本格的な2Dゲームやシミュレーションの作成に適しています。 - 難易度
turtle
やTkinterよりは学習コストがかかります。ゲームのフレームワークの概念(イベントループ、更新、描画など)を理解する必要があります。 - 用途
2Dゲーム、インタラクティブなアニメーション、シミュレーション、簡単な物理エンジンなど。
- 得意なこと
Matplotlib (マットプロットリブ)
- 例(Matplotlibでシンプルな折れ線グラフ):
import matplotlib.pyplot as plt import numpy as np # データの生成 x = np.linspace(0, 10, 100) # 0から10までの100個のデータ点 y = np.sin(x) # sin関数 # プロット plt.plot(x, y) plt.title("サイン波グラフ") plt.xlabel("X軸") plt.ylabel("Y軸") plt.grid(True) # グリッド表示 plt.show() # グラフを表示
- turtleとの比較
- 得意なこと
データ可視化(折れ線グラフ、棒グラフ、散布図、ヒストグラム、画像表示など)、論文やレポート用の静的な図の作成。インタラクティブな要素も一部提供されますが、ゲームのようなリアルタイムの操作は得意ではありません。 - 難易度
グラフの種類やデータの扱いに応じて、ある程度の学習が必要です。 - 用途
データサイエンス、統計解析、機械学習、科学研究、工学分野でのデータ可視化。
- 得意なこと
Kivy (キヴィ)
- turtleとの比較
- 得意なこと
タッチ操作に対応したモダンなUI/UX、クロスプラットフォームアプリケーション、美しいアニメーション。 - 難易度
turtle
やTkinterと比較すると、学習コストは高めです。専用のKV言語というDSL(Domain Specific Language)を使用することもあります。 - 用途
モバイルアプリ、タッチスクリーン対応のキオスク端末、ユニークなインタラクティブアプリケーション。
- 得意なこと
PyQt / PySide (パイキューティー / パイサイド)
- turtleとの比較
- 得意なこと
非常にリッチでプロフェッショナルなGUIアプリケーションの開発。高度なグラフィック、ネットワーク、データベース連携など、ほぼあらゆる種類のデスクトップアプリケーションに対応できます。 - 難易度
turtle
と比較して最も学習コストが高いですが、その分できることも格段に増えます。 - 用途
大規模なデスクトップアプリケーション、IDE(統合開発環境)、メディアプレイヤー、複雑なデータ処理ツールなど。
- 得意なこと
Processing.py (プロセッシング・パイ)
- turtleとの比較
- 得意なこと
リアルタイムの描画、アニメーション、インタラクティブなアート作品、データ可視化。クリエイティブコーディングの分野でよく使われます。 - 難易度
turtle
よりは直感的ではないかもしれませんが、アーティストやデザイナーにも人気があり、学習リソースも豊富です。 - 用途
ジェネラティブアート、インタラクティブなインスタレーション、デザインプロトタイピング、教育。
- 得意なこと
- クリエイティブコーディングやインタラクティブアートに興味がある
Processing.py - プロフェッショナルで高機能なデスクトップアプリを作りたい
PyQt / PySide - モバイルアプリやモダンなタッチUIを作りたい
Kivy - データや統計を視覚的に表現したい
Matplotlib - 簡単な2Dゲームを作りたい、インタラクティブな要素に興味がある
Pygame - GUIアプリケーション開発の基礎を学びたい
Tkinter