3日目のゴール
3日目のテーマは
「ボタンと“入力”を組み合わせて、ユーザーの値を扱えるようになる」 ことです。
1日目:ボタンを押したら関数が呼ばれる
2日目:複数ボタン・lambda で引数付きイベント
3日目では一歩進んで、
テキスト入力欄(Entry)を使う
ボタンを押したときに入力内容を読む
入力内容をラベルに表示したり、チェックしたりする
という、「GUIで“値”を扱う基礎」を身につけます。
Entry(テキスト入力欄)を知る
コンソールの input() を GUI に持ってくるイメージ
これまでのコンソールアプリでは、
name = input("名前を入力してください: ")
Pythonのようにして、
ユーザーから文字列を受け取っていました。
GUIでは、これに相当するのが Entry です。
まずは、入力欄とボタンとラベルを並べてみましょう。
import tkinter as tk
root = tk.Tk()
root.title("Entryの基本")
entry = tk.Entry(root)
entry.pack()
button = tk.Button(root, text="OK")
button.pack()
label = tk.Label(root, text="ここに結果が出ます")
label.pack()
root.mainloop()
Pythonこの時点では、
入力欄に文字は打てますが、
ボタンを押しても何も起きません。
ここに「ボタンイベント」と「Entryの値の取得」をつなげていきます。
Entry から値を取り出す
get() で「今の入力内容」を読む
Entry に入力された文字は、entry.get() で取り出せます。
さっきのコードに、ボタンイベントを足してみます。
import tkinter as tk
def on_ok_click():
text = entry.get()
label.config(text=f"あなたが入力したのは: {text}")
root = tk.Tk()
root.title("Entryから値を読む")
entry = tk.Entry(root)
entry.pack()
button = tk.Button(root, text="OK", command=on_ok_click)
button.pack()
label = tk.Label(root, text="ここに結果が出ます")
label.pack()
root.mainloop()
Python流れを言葉で追うとこうです。
ユーザーが Entry に文字を入力する
ボタン「OK」を押すon_ok_click が呼ばれるentry.get() で入力内容を文字列として取得する
ラベルの text をその文字列で書き換える
ここでの重要ポイントは、
Entry は「入力欄そのもの」
get() は「今の中身を取り出す操作」
という分け方です。
Entry の中身をクリアする
入力後に欄を空にする
多くのアプリでは、
「入力してボタンを押したら、入力欄を空に戻す」
という動きが自然です。
Entry の中身を消すには、delete を使います。
entry.delete(0, tk.END)
Pythonこれは、
「0文字目から、最後までを削除する」
という意味です。
さっきの on_ok_click を少しだけ改造してみます。
def on_ok_click():
text = entry.get()
label.config(text=f"あなたが入力したのは: {text}")
entry.delete(0, tk.END)
Pythonこれで、
入力 → ボタン → ラベルに表示 → 入力欄が空になる
という流れになります。
数値入力+ボタンで簡単な計算をする
「文字列としての入力」を「数値として扱う」
Entry から取り出した値は、
最初は必ず「文字列」です。
例えば、"123" という文字列をint("123") で整数に変換して使います。
簡単な「2倍計算アプリ」を作ってみましょう。
import tkinter as tk
def on_calc_click():
text = entry.get()
try:
value = int(text)
except ValueError:
label.config(text="数字を入力してください")
return
result = value * 2
label.config(text=f"結果: {result}")
entry.delete(0, tk.END)
root = tk.Tk()
root.title("2倍計算アプリ")
entry = tk.Entry(root)
entry.pack()
button = tk.Button(root, text="2倍にする", command=on_calc_click)
button.pack()
label = tk.Label(root, text="ここに結果が出ます")
label.pack()
root.mainloop()
Pythonここでの大事なポイントは二つです。
Entry からの値は文字列なので、int() で変換している
数字以外が入力されたときに備えて try / except を入れている
GUIでも、
「入力 → 型変換 → エラーの可能性」
という流れはコンソールと同じです。
ボタンを「複数の Entry と組み合わせる」
2つの数値を足し算するアプリ
次は、Entry を2つ使ってみます。
仕様はこうです。
上の入力欄に数値1
下の入力欄に数値2
「足し算」ボタンを押すと、合計をラベルに表示
コードはこうなります。
import tkinter as tk
def on_add_click():
text1 = entry1.get()
text2 = entry2.get()
try:
value1 = int(text1)
value2 = int(text2)
except ValueError:
label.config(text="両方とも数字を入力してください")
return
result = value1 + value2
label.config(text=f"結果: {result}")
root = tk.Tk()
root.title("足し算アプリ")
entry1 = tk.Entry(root)
entry1.pack()
entry2 = tk.Entry(root)
entry2.pack()
button = tk.Button(root, text="足し算", command=on_add_click)
button.pack()
label = tk.Label(root, text="ここに結果が出ます")
label.pack()
root.mainloop()
Pythonここでのポイントは、
Entry が増えても、やることは同じget() で文字列を取り出し、必要なら int() で変換する
ボタンイベントの中で、複数の Entry をまとめて扱う
という「パターン」が見えてくることです。
ボタンの有効・無効を切り替える
Entry が空のときはボタンを押せなくする
少しだけ“アプリっぽい”ことをしてみましょう。
「何も入力されていないときは、ボタンを押せないようにする」
という動きです。
ボタンには state という設定があります。
button.config(state="disabled") # 無効
button.config(state="normal") # 有効
Pythonこれを使って、
「Entry に何か入力されたらボタンを有効にする」
という動きを作ってみます。
Entry の変化を監視する(少しだけ応用)
ここは少しだけ難しめですが、
「こんなこともできるんだ」と思えれば十分です。
Entry の中身が変わったときに呼ばれる仕組みとして、StringVar を使う方法があります。
import tkinter as tk
def on_text_change(*args):
text = text_var.get()
if text.strip() == "":
button.config(state="disabled")
else:
button.config(state="normal")
root = tk.Tk()
root.title("入力でボタンON/OFF")
text_var = tk.StringVar()
text_var.trace_add("write", on_text_change)
entry = tk.Entry(root, textvariable=text_var)
entry.pack()
button = tk.Button(root, text="送信", state="disabled")
button.pack()
root.mainloop()
Python流れを説明します。
StringVar() は「文字列を保持する特別な変数」
Entry に textvariable=text_var と渡すと、
Entry の中身と text_var が自動的に同期される
text_var.trace_add("write", on_text_change) は、
「text_var が書き換えられたときに on_text_change を呼ぶ」
という意味です。
on_text_change の中では、
今の文字列を text_var.get() で取得
空ならボタンを無効(disabled)
何か入っていればボタンを有効(normal)
という処理をしています。
2日目・3日目の段階では、
「ボタンの state を変えられる」
というところだけでも押さえておけばOKです。
3日目のミニアプリ:自己紹介メッセージメーカー
仕様
名前と好きなものを入力すると、
「私は〇〇です。〇〇が好きです。」
というメッセージを作ってくれるアプリ。
Entry を2つ使う
ボタンを1つ使う
ラベルに結果を表示する
コード
import tkinter as tk
def on_make_message():
name = entry_name.get().strip()
like = entry_like.get().strip()
if name == "" or like == "":
label_result.config(text="名前と好きなものを両方入力してください。")
return
message = f"私は{name}です。{like}が好きです。"
label_result.config(text=message)
root = tk.Tk()
root.title("自己紹介メッセージメーカー")
label_name = tk.Label(root, text="名前:")
label_name.pack()
entry_name = tk.Entry(root)
entry_name.pack()
label_like = tk.Label(root, text="好きなもの:")
label_like.pack()
entry_like = tk.Entry(root)
entry_like.pack()
button = tk.Button(root, text="メッセージを作る", command=on_make_message)
button.pack()
label_result = tk.Label(root, text="ここにメッセージが表示されます")
label_result.pack()
root.mainloop()
Pythonここまで動かせたら、
Entry で文字を入力する
ボタンでイベントを起こす
ラベルで結果を見せる
という「GUIの基本三角形」が、
自分の手で回せている状態です。
3日目で絶対に押さえてほしい本質
GUIは「入力欄+ボタン+表示」の組み合わせ
今日いちばん大事なのは、
Entry(入力欄)で文字を受け取る
Button(ボタン)で「いつ処理するか」を決める
Label(ラベル)で結果を見せる
この3つを組み合わせると、
もう立派な「小さなアプリ」になる、という感覚です。
技術的なキーワードをまとめると、
Entry の get() で文字列を取り出す
必要なら int() などで型変換する
ラベルの config(text=...) で画面を更新する
ボタンの command= に処理を書く
この4つが、
「GUIで入力を扱うための基本セット」になります。
4日目以降は、
レイアウト(grid)、チェックボックス、ラジオボタンなどを足して、
画面の構成力を上げていきます。
まずは今日の自己紹介アプリを、自分なりに
項目を増やす
メッセージの文章を変える
フォントや色を変える
など、少し遊びながら体に馴染ませていきましょう。

