この記事ではPythonで計算機を作っていきます。
完成図は以下のようになります。小さいサイズですがサンプルのコードをいじって調整することも可能です。
何故計算機かというとコード量が少なく基本を作ってしまえばカスタムしやすいからです。
まず最初に、PySimpleGUIをインストールします。
pip install PySimpleGUI
このフレームワークはPythonのGUI作成を簡素化し、コードを読みやすく、書きやすくします。以下のステップに従って、基本的な計算機アプリの作成方法を詳細に説明します。
ステップ 1: PySimpleGUIのインポート
PySimpleGUIライブラリをインポートします。これにより、GUIコンポーネントを作成し、アプリケーションウィンドウを構築できます。
import PySimpleGUI as sg
ステップ 2: レイアウトの定義
計算機のUIは、ボタンと入力フィールドから構成されます。
これらの要素を配置するために、レイアウトをリストの形式で定義します。各リスト内の要素は、ウィンドウの一行に対応し、sg.Buttonやsg.Inputのようなウィジェットを配置します。
layout = [
[sg.Input(size=(25, 1), key='-DISPLAY-')], # 結果表示用の入力フィールド
[sg.Button('7'), sg.Button('8'), sg.Button('9'), sg.Button('/')], # 数字と演算子のボタン
[sg.Button('4'), sg.Button('5'), sg.Button('6'), sg.Button('*')],
[sg.Button('1'), sg.Button('2'), sg.Button('3'), sg.Button('-')],
[sg.Button('0'), sg.Button('.'), sg.Button('='), sg.Button('+')],
[sg.Button('Clear')] # クリアボタン
]
ステップ 3: ウィンドウの作成
定義したレイアウトを使用して、アプリケーションのウィンドウを作成します。sg.Windowを使い、ウィンドウのタイトルとレイアウトを指定します。
window = sg.Window('計算機', layout)
ステップ 4: イベントループの作成
アプリケーションウィンドウが表示された後、ユーザーの入力を処理するためのイベントループを作成します。ユーザーがボタンをクリックすると、そのボタンに対応するイベントが生成され、適切なアクションを実行します。
while True:
event, values = window.read()
if event in (None, 'Exit'):
break
# ここでイベントに応じた処理を行う
ステップ 5: 計算処理の実装
ユーザーからの入力に応じて計算を行い、結果を表示するための関数を実装します。例えば、数字や演算子がクリックされた場合、その値を取得し、表示エリアに追加します。イコールボタンがクリックされた場合は、表示エリアの式を評価し、結果を表示します。
def calculate(event, values):
if event in '1234567890+-*/':
current = values['-DISPLAY-']
new_value = current + event
return new_value
elif event == '=':
try:
result = str(eval(values['-DISPLAY-']))
return result
except:
return 'Error'
elif event == 'Clear':
return ''
ステップ 6: イベント処理の更新
イベントループ内で、calculate関数を呼び出して計算を実行し、結果を表示フィールドに更新します。
result = calculate(event, values)
window['-DISPLAY-'].update(result)
ステップ 7: アプリケーションの終了処理
ユーザーがウィンドウを閉じるか、終了イベントが発生した場合、イベントループを終了し、ウィンドウを閉じます。
window.close()
このガイドに従って、PySimpleGUIを使用して基本的な計算機アプリを作成することができます。このフレームワークは非常に柔軟で、さらに複雑な機能や改善を加えることが可能です。
🔳.全体のコード
全体のコードは以下のようになります。
import PySimpleGUI as sg
# 計算機のレイアウトを定義
layout = [
[sg.Input(size=(25, 1), key='-DISPLAY-')],
[sg.Button('7'), sg.Button('8'), sg.Button('9'), sg.Button('/')],
[sg.Button('4'), sg.Button('5'), sg.Button('6'), sg.Button('*')],
[sg.Button('1'), sg.Button('2'), sg.Button('3'), sg.Button('-')],
[sg.Button('0'), sg.Button('.'), sg.Button('='), sg.Button('+')],
[sg.Button('Clear')]
]
# ウィンドウを作成
window = sg.Window('計算機', layout)
# 計算を行う関数
def calculate(event, values):
if event in '1234567890+-*/':
current = values['-DISPLAY-']
new_value = current + event
return new_value
elif event == '=':
try:
result = str(eval(values['-DISPLAY-']))
return result
except:
return 'Error'
elif event == 'Clear':
return ''
# イベントループ
while True:
event, values = window.read()
if event in (None, 'Exit'):
break
result = calculate(event, values)
window['-DISPLAY-'].update(result)
window.close()
これで実行すると以下のようになります。
少ないコード量で簡単な計算機ができました。余計なデータがない分軽量になります。