PythonとTkinterで作る!初心者向けシンプルGUI計算機の作り方
このチュートリアルでは、Pythonの標準モジュールTkinterを使用して、シンプルなGUI計算機を作成します。TkinterはPythonに組み込まれているGUIアプリケーション開発用のモジュールで、追加インストールが不要で手軽に使えるのが魅力です。GUIアプリケーションを活用すれば、データや計算結果を視覚的にわかりやすく操作できます。
それでは、シンプルなGUI計算機の作り方を見ていきましょう。
作成の手順
- Tkinterからすべての機能を「*」でインポートします。
- 計算機のインターフェース(ウィンドウ)を作成します。
- 入力フィールドに数字を入力する関数(input_number)を作成します。
- 入力フィールドの内容をすべて消去する関数(clear_input_field)を作成します。
- 最後に、入力された式を評価して結果を返す関数(evaluate)を作成します。
サンプルコード
# tkinterからすべてをインポート
from tkinter import *
# 全ての関数からアクセスできるようにする式変数
expression = ""
def input_number(number, equation):
# グローバル変数expressionにアクセス
global expression
# 文字列として連結
expression = expression + str(number)
equation.set(expression)
def clear_input_field(equation):
global expression
expression = ""
# 入力フィールドに空のメッセージを設定
equation.set("Enter the expression")
def evaluate(equation):
global expression
try:
# 式の評価を試みる
result = str(eval(expression))
# 結果を入力フィールドに表示
equation.set(result)
# expressionを空文字列にリセット
expression = ""
except:
# エラーが発生した場合、ユーザーに通知
equation.set("Enter a valid expression")
expression = ""
# GUIの作成
def main():
# メインウィンドウを生成
window = Tk()
# ウィンドウのタイトルを設定
window.title("Calculator")
# ウィンドウサイズを設定
window.geometry("325x175")
# StringVarクラスのインスタンス化
equation = StringVar()
# 式を入力するフィールド
input_field = Entry(window, textvariable=equation)
input_field.place(height=100)
# ウィジェットの配置にはgridレイアウトを使用
input_field.grid(columnspan=4, ipadx=100, ipady=5)
# プレースホルダーメッセージを設定
equation.set("Enter the expression")
# 各ボタンを作成し、それぞれの位置に配置
_1 = Button(window, text='1', fg='white', bg='black', bd=0,
command=lambda: input_number(1, equation), height=2, width=7)
_1.grid(row=2, column=0)
_2 = Button(window, text='2', fg='white', bg='black', bd=0,
command=lambda: input_number(2, equation), height=2, width=7)
_2.grid(row=2, column=1)
_3 = Button(window, text='3', fg='white', bg='black', bd=0,
command=lambda: input_number(3, equation), height=2, width=7)
_3.grid(row=2, column=2)
_4 = Button(window, text='4', fg='white', bg='black', bd=0,
command=lambda: input_number(4, equation), height=2, width=7)
_4.grid(row=3, column=0)
_5 = Button(window, text='5', fg='white', bg='black', bd=0,
command=lambda: input_number(5, equation), height=2, width=7)
_5.grid(row=3, column=1)
_6 = Button(window, text='6', fg='white', bg='black', bd=0,
command=lambda: input_number(6, equation), height=2, width=7)
_6.grid(row=3, column=2)
_7 = Button(window, text='7', fg='white', bg='black', bd=0,
command=lambda: input_number(7, equation), height=2, width=7)
_7.grid(row=4, column=0)
_8 = Button(window, text='8', fg='white', bg='black', bd=0,
command=lambda: input_number(8, equation), height=2, width=7)
_8.grid(row=4, column=1)
_9 = Button(window, text='9', fg='white', bg='black', bd=0,
command=lambda: input_number(9, equation), height=2, width=7)
_9.grid(row=4, column=2)
_0 = Button(window, text='0', fg='white', bg='black', bd=0,
command=lambda: input_number(0, equation), height=2, width=7)
_0.grid(row=5, column=0)
plus = Button(window, text='+', fg='white', bg='black', bd=0,
command=lambda: input_number('+', equation), height=2, width=7)
plus.grid(row=2, column=3)
minus = Button(window, text='-', fg='white', bg='black', bd=0,
command=lambda: input_number('-', equation), height=2, width=7)
minus.grid(row=3, column=3)
multiply = Button(window, text='*', fg='white', bg='black', bd=0,
command=lambda: input_number('*', equation), height=2, width=7)
multiply.grid(row=4, column=3)
divide = Button(window, text='/', fg='white', bg='black', bd=0,
command=lambda: input_number('/', equation), height=2, width=7)
divide.grid(row=5, column=3)
equal = Button(window, text='=', fg='white', bg='black', bd=0,
command=lambda: evaluate(equation), height=2, width=7)
equal.grid(row=5, column=2)
clear = Button(window, text='Clear', fg='white', bg='black', bd=0,
command=lambda: clear_input_field(equation), height=2, width=7)
clear.grid(row=5, column=1)
# GUIを表示
window.mainloop()
# プログラムの開始点
if __name__ == '__main__':
main()
コードのポイント解説
グローバル変数による式の管理
expressionは全関数で共有されるグローバル変数で、ユーザーが入力した式を文字列として保持します。globalキーワードを使うことで、関数内からもこの変数を更新できます。
StringVarとEntryウィジェットの連携
StringVarはTkinterの特殊な変数クラスで、Entryウィジェットと紐付けることで、変数の値が変わると自動的に画面表示も更新されます。これにより、ボタン操作のたびに入力フィールドの内容を簡単に反映できます。
eval()による式の評価と例外処理
eval()関数は文字列として渡された数式を実際に計算します。不正な式が入力された場合に備えてtry-exceptブロックでエラーを捕捉し、「Enter a valid expression」というメッセージを表示することで、プログラムがクラッシュするのを防いでいます。
実行結果
上記のプログラムを実行すると、次のようなシンプルな計算機が起動します。

「=」ボタンを押すと、入力された式の計算結果が表示されます。

まとめ
このチュートリアルでは、Python標準のTkinterモジュールだけを使って、四則演算が可能なGUI計算機を作成しました。ウィジェットの配置にはgridレイアウトマネージャーを使用し、ボタンの色やサイズも自由にカスタマイズできます。さらに機能を拡張したい場合は、小数点ボタンやパーセント計算、キーボード入力への対応などを追加してみると良い練習になるでしょう。
このチュートリアルについてご不明な点がある場合は、コメント欄でお気軽にお尋ねください。
-
【Python】Tkinterで作るカラーゲーム – 30秒で文字の色を当てるGUIゲーム開発
GUIアプリケーションの開発において、Pythonの標準ライブラリ「Tkinter」は非常に人気が高く、初心者でも扱いやすいツールです。追加のインストール作業なしに使えるため、Tkinterを活用すればシンプルなGUIゲームでも手軽に開発できます。 この記事では、Tkinterを使った「カラーゲーム」の作り方を紹介します。このゲームでは、画面に表示される単語の文字色をプレイヤーが入力し、正解するたびにスコアが1点ずつ加算されます。制限時間は30秒で、使用される色は赤(Red)、青(Blue)、緑(Green)、ピンク(Pink)、黒(Black)、黄(Yellow)、オレンジ(Orange)、
-
PythonでのCX_Freezeの使い方:スクリプトを実行ファイル(EXE)に変換する方法
はじめに 何か面白いものを作りたいという欲求は人間の本能であり、完成したものは誰かに共有したくなるものです。Pythonでもその願いを叶えられます。ただし、作成したPythonスクリプトをそのまま共有するには、相手のマシンにも同じバージョンのPythonと、プログラムで使用しているすべてのモジュールがインストールされている必要があります。 そこで役立つのがCX_Freezeです。このツールを使えば、Pythonがインストールされていない環境でも動作するスタンドアロンの実行ファイル(.exe)を作成できます。 CX_Freezeのインストール まず、コマンドプロンプトで以下のコマンドを実行し、c