この記事では、Python初学者の方に向けて、PythonでGUIで操作できる電卓の作成方法を解説します。併せて使用しているPythonの標準ライブラリの「tkinter」の基礎構文を解説したいと思います。
かなり簡易的な処理になりますが、関数や繰り返し構文、条件分岐、tkinterを使用して作成していますので、実際に手を動かして作成してみることで、Python基礎構文に定着につながると思います。またGUIで操作可能なツールを作れるようになることで、例えば業務効率化ツールなどを作った際に、プログラムに詳しくない方にも展開できると思います。
Tkinterとは?
Tkinterは、Python言語でGUI(グラフィカルユーザーインターフェース)を作成するためのツールキットです。GUIとは、マウスやキーボードなどの操作によってアプリケーションを操作するための視覚的な要素を含むインターフェースのことです。
TkinterはPythonの標準ライブラリの一部であり、Pythonを使ってプログラミングする際に付属しています。Tkinterを使うことで、ボタン、テキストボックス、メニューなどのGUI要素を簡単に作成し、ウィンドウやダイアログボックスなどのウィンドウを操作することができます。プログラムの流れを理解し、Pythonの基本的な知識があれば、Tkinterを使って直感的で使いやすいGUIアプリケーションを作成することができます。
Tkinterの基本的な構文
1.tkinterのインポート
Tkinterモジュールを使うためには、まずインポートします。
import tkinter as tk
2.ウィンドウの作成
Tk()
を使ってウィンドウを作成します。
# Tkinterウィンドウの作成
root = tk.Tk()
root.title("My Window") # ウィンドウのタイトルを設定
3.ウィジェットの作成
ウィンドウ内にはさまざまなウィジェット(ボタン、ラベル、テキストボックスなど)を配置できます。
button = tk.Button(root, text="Click me!", command=callback_function)
label = tk.Label(root, text="Hello, Tkinter!")
entry = tk.Entry(root)
4.ウィジェットの配置
pack()
, grid()
, place()
などのメソッドを使用してウィジェットを配置します。
button.pack() # パックする方法
label.grid(row=0, column=0) # グリッドに配置する方法
entry.place(x=50, y=50) # 指定した位置に配置する方法
5.イベントの処理
イベント(ボタンクリックなど)を処理するには、コールバック関数を指定します。
def callback_function():
print("Button clicked!")
button = tk.Button(root, text="Click me!", command=callback_function)
6.文字列変数の定義
StringVar
, IntVar
, DoubleVar
などのTkinter変数を使用して、ウィジェットの値を追跡します。
var = tk.StringVar()
label = tk.Label(root, textvariable=var)
var.set("Hello, Tkinter!")
7.ウィジェットの属性
ウィジェットの外観や動作をカスタマイズするために、各ウィジェットにはさまざまな属性があります。パラメタの詳細は公式リファレンスを確認ください。
button = tk.Button(root, text="Click me!", bg="blue", fg="white", font=("Arial", 12))
label = tk.Label(root, text="Hello, Tkinter!", padx=10, pady=10, relief="raised")
8.メインループの実行
Tkinterアプリケーションのメインループを実行します。メインループを実行しないとコードの処理が終了しきった段階でGUI画面が閉じられてしまいます。
root.mainloop()
電卓を作ってみる
完成イメージ
プログラムを実行するとポップアップウィンドウで電卓が立ち上がります。
コード解説
import tkinter as tk
def button_click(symbol):
current = display_var.get()
if current == "Error":
display_var.set("") # エラーの場合は画面をクリア
current=""
if symbol == "=":
try:
result = eval(current)
display_var.set(str(result))
except:
display_var.set("Error")
elif symbol == "C":
display_var.set("") # 入力をクリア
else:
display_var.set(current + symbol)
root = tk.Tk()
root.title("電卓")
display_var = tk.StringVar()
display = tk.Entry(root, textvariable=display_var, font=("Arial", 18), bd=10, insertwidth=4, width=14, justify="right")
display.grid(row=0, column=0, columnspan=4)
buttons = [
('7', 1, 0), ('8', 1, 1), ('9', 1, 2), ('/', 1, 3),
('4', 2, 0), ('5', 2, 1), ('6', 2, 2), ('*', 2, 3),
('1', 3, 0), ('2', 3, 1), ('3', 3, 2), ('-', 3, 3),
('0', 4, 0), ('.', 4, 1), ('=', 4, 2), ('+', 4, 3),
('C', 5, 0)
]
for (text, row, col) in buttons:
button = tk.Button(root, text=text, font=("Arial", 18), padx=20, pady=20,
command=lambda symbol=text: button_click(symbol))
button.grid(row=row, column=col)
root.mainloop()
button_click
関数は、ボタンがクリックされたときの動作を定義します。数字や演算子がクリックされると、それを現在の表示に追加します。”=”ボタンがクリックされると、入力された式を計算して結果を表示します。”C”ボタンがクリックされると、表示をクリアします。eval関数で入力された計算式の算出を行っています。display_var
は、表示されるテキストを保持するためのTkinterの文字列変数でStringVar()オブジェクトでバインディングしています。Entry
ウィジェットを使って、テキスト入力を表示します。このウィジェットは、電卓の画面として機能します。- ボタンは2次元リストとして定義され、各ボタンのテキスト、配置する行、配置する列が指定されています。これらのボタンは
for
ループを使用して配置されます。ボタンがクリックされると、button_click
関数が呼び出されます。
まとめ
Tkinterを使ったGUI電卓作成はPythonのGUIアプリ構築の良い方法であり、直感的で豊富な機能を持ち、基本的なGUI概念や操作を学べます。
ボタン配置やイベント処理、テキスト表示など様々な要素を組み合わせ、使いやすい電卓を作成しPython GUI開発の基礎を学び、将来の複雑なアプリ構築に役立つと思います。
Tkinterを使ったプロジェクトはGUI学習の始めに最適で、今後のプロジェクトで活かしてみてください。