この記事は、PythonのtkinterライブラリでGUIデスクトップアプリを作る実践型チュートリアルです。Udemyで公開中のPythonコース「ゼロからはじめる独学プログラミング講座|Python × PyCharm開発環境構築」の演習課題としても活用できます。
今回は、2つの数字と演算子を入力して計算できるシンプルな電卓アプリをステップごとに一緒に作っていきます。tkinterを使ったGUIアプリ開発の基礎を、手を動かしながら自然に身につけられる構成になっています。
(解答解説の動画はUdemy本編をご覧ください。)
この課題のゴール:tkinterで電卓GUIアプリを完成させる
このチュートリアルでは、Python初心者がtkinterを使ってGUI(Graphical User Interface)アプリを作ることを目標にしています。
具体的には、以下の機能を持つシンプル電卓アプリを完成させます。
- 2つの数値を入力できる入力欄(Entryウィジェット)
- 演算子(+・-・×・÷)を選ぶドロップダウン(コンボボックス)
- 計算を実行するボタン(Buttonウィジェット)
- 計算結果を表示するラベル(Labelウィジェット)
プログラミングを始めたばかりの方でも、各ステップのコードと解説を読みながら進めれば理解が深まります。焦らずじっくり取り組んでみてください。
完成するとこのようなアプリになります。2つの入力ボックスに値を入れ、ドロップダウンから演算子を選択し、「計算する」ボタンをクリックすると結果が表示されます。
⚠️ 注意:Google Colabでは実行できません。ローカルのPython環境(PyCharm・VS Code・IDLE など)を使用してください。
【ステップ1】tkinterで基本ウィンドウを作る
まずは、GUIアプリの土台となるウィンドウの作成から始めましょう。tkinterを使ったデスクトップアプリでは、最初にこの「ウィンドウ(入れ物)」を用意することが必須です。
import tkinter as tk
root = tk.Tk()
root.title("電卓アプリ")
root.geometry("300x250")
root.configure(bg="white")
root.mainloop()
実行すると、何もないウィンドウが表示されます。各コードの役割は以下のとおりです。
| コード | 役割 |
|---|---|
import tkinter as tk | tkinterライブラリをインポートする |
tk.Tk() | アプリのメインウィンドウ(本体)を作成する |
title() | ウィンドウ上部に表示されるタイトルを設定する |
geometry() | ウィンドウの幅と高さ(ピクセル)を指定する |
configure() | 背景色などのウィンドウ設定を変更する |
mainloop() | ウィンドウを表示し、ユーザー操作を待機するループを開始する |
tkinterでは、tk.Tk()で作った「ウィンドウ」という入れ物の中に、ボタンや入力欄などの部品(ウィジェット)を追加していくことでアプリを完成させていきます。
【ステップ2】tkinter Entryウィジェットで数値入力欄を作る
次に、ユーザーが数字を入力できる欄を2つ作ります。足し算や引き算で使う「左辺の数値」と「右辺の数値」を入力するためのフォームです。tkinterでは、テキスト入力欄をEntryウィジェットで作成します。
entry1 = tk.Entry(root, width=10)
entry1.pack()
entry2 = tk.Entry(root, width=10)
entry2.pack()
実行すると、入力フォームが2つ縦に並んで表示されます。各コードの役割は以下のとおりです。
- Entry:ユーザーのキーボード入力を受け取るためのウィジェット
- width=10:入力欄の横幅を文字数単位で指定する
- pack():ウィンドウ内に部品を配置するメソッド(配置しないと画面に表示されない)
⚠️ tkinterではウィジェットを作成しただけでは画面に表示されません。pack()・grid()・place()のいずれかで配置の指示を行う必要があります。今回は縦に並べるだけなので、最もシンプルなpack()を使用しています。
【ステップ3】ttk.Comboboxで演算子選択ドロップダウンを作る
続いて、ユーザーが「どの計算をしたいか」を選べるように、演算子の選択メニュー(ドロップダウン)を用意します。tkinterでドロップダウン(コンボボックス)を使うには、tkinter.ttkモジュールのComboboxウィジェットを利用します。
from tkinter import ttk
operator_var = tk.StringVar()
operator_var.set("+")
operator_menu = ttk.Combobox(root, textvariable=operator_var, values=["+", "-", "*", "/"], width=5)
operator_menu.pack()
各コードの役割は以下のとおりです。
- ttk.Combobox:ドロップダウン形式の選択メニューウィジェット
- StringVar():ウィジェットの値をPythonの変数として管理するためのtkinter専用の変数オブジェクト
- textvariable:ウィジェットの現在の値と連動させる変数を指定する
- values:ドロップダウンに表示する選択肢のリストを指定する
- set(“+”):初期値として「+」を設定する
StringVar()はtkinter特有の仕組みです。通常のPython変数ではウィジェットの値を動的に取得・更新できないため、tkinterが提供する専用の変数クラスを使います。
【ステップ4】計算ボタンと結果表示ラベルを追加する
いよいよ、計算を実行するボタン(Buttonウィジェット)と、計算結果を表示するラベル(Labelウィジェット)を追加します。
def calculate():
try:
num1 = float(entry1.get())
num2 = float(entry2.get())
op = operator_var.get()
if op == "+":
result = num1 + num2
elif op == "-":
result = num1 - num2
elif op == "*":
result = num1 * num2
elif op == "/":
if num2 == 0:
result_label.config(text="エラー:0で割ることはできません")
return
result = num1 / num2
else:
result_label.config(text="無効な演算子です")
return
result_label.config(text=f"結果:{result}")
except ValueError:
result_label.config(text="エラー:数値を入力してください")
btn = tk.Button(root, text="計算する", command=calculate)
btn.pack()
result_label = tk.Label(root, text="結果がここに表示されます", bg="white")
result_label.pack()
各コードの役割は以下のとおりです。
- def calculate():ボタンが押されたときに実行される関数。入力値を取得して計算し、結果をラベルに表示する
- entry1.get() / entry2.get():Entryウィジェットに入力された値を文字列として取得する
- float():取得した文字列を浮動小数点数(小数を含む数値)に変換する
- operator_var.get():コンボボックスで選択中の演算子を取得する
- tk.Button:クリック可能なボタンウィジェット。
command引数に実行したい関数を指定する - tk.Label:テキストや画像を表示するウィジェット。
config(text=...)で表示内容を動的に更新できる - try / except ValueError:数値以外が入力された場合のエラーを適切に処理する
ボタンのcommand引数には「関数の参照(関数名のみ)」を渡します。command=calculate()のように()をつけてしまうとボタン配置時に即実行されてしまうため注意してください。
【完成版】tkinter電卓アプリの全コード
ここまでのステップを1つにまとめた完成版の全コードです。そのままコピーして実行できます。
import tkinter as tk
from tkinter import ttk
# ウィンドウの作成
root = tk.Tk()
root.title("電卓アプリ")
root.geometry("300x250")
root.configure(bg="white")
# 数値入力欄
entry1 = tk.Entry(root, width=10)
entry1.pack(pady=5)
entry2 = tk.Entry(root, width=10)
entry2.pack(pady=5)
# 演算子ドロップダウン
operator_var = tk.StringVar()
operator_var.set("+")
operator_menu = ttk.Combobox(root, textvariable=operator_var, values=["+", "-", "*", "/"], width=5)
operator_menu.pack(pady=5)
# 計算関数
def calculate():
try:
num1 = float(entry1.get())
num2 = float(entry2.get())
op = operator_var.get()
if op == "+":
result = num1 + num2
elif op == "-":
result = num1 - num2
elif op == "*":
result = num1 * num2
elif op == "/":
if num2 == 0:
result_label.config(text="エラー:0で割ることはできません")
return
result = num1 / num2
else:
result_label.config(text="無効な演算子です")
return
result_label.config(text=f"結果:{result}")
except ValueError:
result_label.config(text="エラー:数値を入力してください")
# 計算ボタン
btn = tk.Button(root, text="計算する", command=calculate)
btn.pack(pady=5)
# 結果表示ラベル
result_label = tk.Label(root, text="結果がここに表示されます", bg="white")
result_label.pack(pady=10)
root.mainloop()
tkinter GUIアプリ開発のまとめ
このチュートリアルでは、Pythonのtkinterライブラリを使って、以下のウィジェットの使い方を学びました。
| ウィジェット | 用途 |
|---|---|
tk.Tk() | メインウィンドウの作成 |
tk.Entry | テキスト入力欄 |
ttk.Combobox | ドロップダウン選択メニュー |
tk.Button | クリックボタン |
tk.Label | テキスト・結果の表示 |
tk.StringVar() | ウィジェットと連動する変数 |
tkinterはPythonに標準で付属しているため、追加インストール不要でGUIデスクトップアプリを作れる点が大きな魅力です。今回作った電卓アプリをベースに、デザインの変更や機能追加(履歴表示・キーボード入力対応など)にもぜひ挑戦してみてください。
Udemyコースの詳細・解答解説動画はコース本編をご確認ください。Pythonの基礎からGUIアプリ開発まで、ステップごとに丁寧に解説しています。
関連記事
Pythonの基礎や開発環境構築に関する記事もあわせてご覧ください。tkinterをさらに活用したGUIアプリ開発の応用チュートリアルも順次公開予定です。
📚 関連記事
- 【Python入門】関数(def文)の使い方を完全解説|引数・return・デフォルト値まで— 電卓の計算ロジックで関数定義とreturn文を使うため
- 【初心者向け】Pythonのif文の基礎と実践例7問— 演算子分岐処理でif/elif/elseの使い方を学べる
- 【ざっくり解説】例外処理— 電卓の入力値チェックでtry/exceptの使い方が必要
- 【Pythonでできる】自動化プログラムの動作サンプル紹介— GUIアプリ開発の応用例として参考になる








