カテゴリ: Python 更新日: 2026/06/26

PythonのPyQtでシンプルな電卓アプリを作る方法!初心者でもわかるGUIプログラミング入門

PythonのPyQtでシンプルな電卓アプリを作る方法
PythonのPyQtでシンプルな電卓アプリを作る方法

先生と生徒の会話形式で理解しよう

生徒

「Pythonで電卓アプリを作るって難しいですか?」

先生

「大丈夫です。PythonのPyQtというライブラリを使うと、簡単にGUI(グラフィカルユーザーインターフェース)で電卓を作れます。」

生徒

「GUIってなんですか?」

先生

「画面上にボタンや入力欄などを表示して、マウスやキーボードで操作できるインターフェースのことです。電卓のボタンをクリックして数字が出るのもGUIの一例です。」

生徒

「なるほど。ではPythonでどうやって作るんですか?」

先生

「順番に手を動かしながら見ていきましょう。」

1. PyQtのインストール方法

1. PyQtのインストール方法
1. PyQtのインストール方法

まず、PyQtを使うためにPythonにインストールする必要があります。PyQtはPythonで使えるGUIライブラリのひとつです。インストールは簡単で、コマンドプロンプトやターミナルで次のコマンドを実行します。

 pip install pyqt5

これで、PyQtを使ったアプリ開発ができる環境が整いました。

2. シンプルなウィンドウを作る

2. シンプルなウィンドウを作る
2. シンプルなウィンドウを作る

PyQtでは、QWidgetQMainWindowを使ってウィンドウを作ります。まずは基本的なウィンドウを作ってみましょう。

 import sys from PyQt5.QtWidgets import QApplication, QWidget
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("シンプル電卓")
window.resize(300, 400)
window.show()
sys.exit(app.exec_())

このコードを実行すると、シンプルなウィンドウが表示されます。

3. ボタンと入力欄を配置する

3. ボタンと入力欄を配置する
3. ボタンと入力欄を配置する

電卓には数字ボタンや演算ボタン、結果表示の入力欄が必要です。PyQtではQPushButtonQLineEditを使います。

 from PyQt5.QtWidgets import QVBoxLayout, QLineEdit, QPushButton
window_layout = QVBoxLayout()
display = QLineEdit()
window_layout.addWidget(display)

button_1 = QPushButton("1")
window_layout.addWidget(button_1)

window.setLayout(window_layout)

これで、数字「1」のボタンと表示欄がウィンドウに配置されます。ボタンを押したときに表示欄に文字を追加する処理も簡単に追加できます。

4. ボタンのクリックで計算式を表示する

4. ボタンのクリックで計算式を表示する
4. ボタンのクリックで計算式を表示する

ボタンを押したら数字や演算子が表示されるように、clickedというシグナル(信号)を使います。

 def add_text(text): display.setText(display.text() + text)
button_1.clicked.connect(lambda: add_text("1"))
button_plus = QPushButton("+")
button_plus.clicked.connect(lambda: add_text("+"))
window_layout.addWidget(button_plus)

このようにして、数字や「+」を表示欄に追加できます。lambdaを使うことで、簡単にボタンに機能を割り当てられます。

5. 計算を実行する

5. 計算を実行する
5. 計算を実行する

表示された計算式を計算して結果を表示するには、Pythonのeval()関数を使います。ただし、evalは外部入力に注意が必要です。

 def calculate(): try: result = str(eval(display.text())) display.setText(result) except: display.setText("エラー")
button_equal = QPushButton("=")
button_equal.clicked.connect(calculate)
window_layout.addWidget(button_equal)

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

6. クリアボタンを追加する

6. クリアボタンを追加する
6. クリアボタンを追加する

計算式を一度消したいときは、クリアボタンを作ります。

 def clear_display(): display.setText("")
button_clear = QPushButton("C")
button_clear.clicked.connect(clear_display)
window_layout.addWidget(button_clear)

このボタンを押すと、表示欄が空になります。

7. 全てのボタンをまとめてレイアウトする

7. 全てのボタンをまとめてレイアウトする
7. 全てのボタンをまとめてレイアウトする

数字や演算子のボタンはQGridLayoutを使うと、きれいに並べられます。

 from PyQt5.QtWidgets import QGridLayout
grid = QGridLayout()
buttons = [
("7",0,0), ("8",0,1), ("9",0,2),
("4",1,0), ("5",1,1), ("6",1,2),
("1",2,0), ("2",2,1), ("3",2,2),
("0",3,0), ("+",3,1), ("=",3,2)
]

for text, row, col in buttons:
btn = QPushButton(text)
if text == "=":
btn.clicked.connect(calculate)
else:
btn.clicked.connect(lambda checked, t=text: add_text(t))
grid.addWidget(btn, row, col)

window_layout.addLayout(grid)

これで、電卓のボタンがわかりやすく配置され、実際に使える電卓アプリになります。

8. まとめに向けて使いやすくする工夫

8. まとめに向けて使いやすくする工夫
8. まとめに向けて使いやすくする工夫

さらに見やすくするために、ボタンのサイズやフォントを調整したり、ウィンドウサイズを固定したりすると使いやすくなります。例えば、setFixedSizeを使うとウィンドウサイズを固定できます。

 window.setFixedSize(300, 400)

これで電卓アプリの基本的なGUIが完成です。あとは自由に色を変えたり、ボタンのデザインを工夫したりすることで、自分だけの電卓アプリが作れます。

まとめ

まとめ
まとめ

ここまでで、PythonのPyQtを使ったシンプルな電卓アプリの作り方を詳しく学びました。まず、PythonにPyQt5をインストールすることで、GUIアプリ開発の環境を整えることができました。そして、QWidgetQMainWindowを使ってウィンドウを作成し、QLineEditで計算結果や入力式を表示する欄を設置しました。次に、QPushButtonを使って数字や演算子のボタンを作り、クリック時に入力欄に文字を追加する方法を理解しました。さらに、eval()関数を使うことで、入力された計算式を実際に計算して結果を表示する方法も習得しました。

電卓アプリをより便利にする工夫として、クリアボタンの追加やQGridLayoutを使ったボタンの整列、ウィンドウサイズ固定の方法なども学びました。これにより、使いやすく直感的なGUIアプリを作ることができ、Python初心者でも実際に手を動かしながら理解できる内容になっています。また、ボタンのサイズやフォント、レイアウト調整の工夫で、ユーザーにとって見やすく操作しやすい電卓アプリに仕上げることが可能です。

今回学んだ内容は、Pythonの基本文法、関数の使い方、GUIのイベント処理、レイアウト管理など、幅広いスキルを総合的に身につけることができます。特に、PyQtのシグナルとスロットの仕組みを理解することで、ボタンや入力欄の操作に応じたプログラムの反応を自在に制御できるようになりました。さらに、計算結果の処理やエラー処理を組み込むことで、より堅牢で実用的なアプリケーションを作れることも確認できました。

サンプルプログラムの振り返り

 import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QPushButton, QVBoxLayout, QGridLayout

# アプリケーション作成
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("シンプル電卓")
window.setFixedSize(300, 400)

# レイアウトと表示欄作成
window_layout = QVBoxLayout()
display = QLineEdit()
window_layout.addWidget(display)

# ボタンを配置するグリッド
grid = QGridLayout()
buttons = [
    ("7",0,0), ("8",0,1), ("9",0,2),
    ("4",1,0), ("5",1,1), ("6",1,2),
    ("1",2,0), ("2",2,1), ("3",2,2),
    ("0",3,0), ("+",3,1), ("=",3,2), ("C",4,0)
]

# ボタンのクリックイベントを設定
def add_text(text):
    display.setText(display.text() + text)

def calculate():
    try:
        result = str(eval(display.text()))
        display.setText(result)
    except:
        display.setText("エラー")

def clear_display():
    display.setText("")

for text, row, col in buttons:
    btn = QPushButton(text)
    if text == "=":
        btn.clicked.connect(calculate)
    elif text == "C":
        btn.clicked.connect(clear_display)
    else:
        btn.clicked.connect(lambda checked, t=text: add_text(t))
    grid.addWidget(btn, row, col)

window_layout.addLayout(grid)
window.setLayout(window_layout)
window.show()
sys.exit(app.exec_())

このサンプルコードを通じて、基本的な電卓アプリを完成させることができました。ボタンを押すと表示欄に文字が追加され、「=」ボタンで計算が実行され、「C」ボタンで入力をクリアできる構成です。さらに、自分でボタンの色やサイズを変更したり、新しい演算機能を追加することで、より高度なGUIアプリへと発展させることも可能です。

先生と生徒の振り返り会話

生徒

「先生、PyQtでここまで簡単に電卓アプリを作れるとは思いませんでした。」

先生

「そうですね。PyQtは初心者でもGUIアプリを作りやすく設計されているので、Pythonの基本スキルさえあれば十分に作れます。」

生徒

「ボタンのクリックで計算式を表示したり、計算結果を出したりする仕組みも理解できました。」

先生

「はい。特にclicked.connectlambdaの使い方を覚えると、さまざまな操作をボタンに割り当てられるようになります。」

生徒

「なるほど。これなら数字を増やしたり、新しい演算を追加したりすることもできそうですね。」

先生

「その通りです。さらにUIを工夫して色やフォントを調整すれば、見やすくて操作しやすい電卓アプリになります。今回の学習で、PythonのGUIアプリ開発の基本をしっかり身につけられましたね。」

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

関連記事:
Python のGUIプログラミングの記事一覧へ
新着記事
New1
Python
Pythonの整数と浮動小数点数の違いとは?数値型の基本を解説
New2
Python
Pythonで文字列をリストに変換する方法!split()とjoin()の使い方
New3
Python
Pythonのbreakとcontinueの違いとは?ループの制御方法をマスター
New4
Python
Pythonのstartswith()・endswith()の使い方!文字列の前後をチェック
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPの特殊文字とエスケープ処理を完全ガイド!初心者向けにhtmlspecialcharsとhtmlentitiesをやさしく解説
No.2
Java&Spring記事人気No2
PHP
PHP の文字列のフォーマット(sprintf, printf)
No.3
Java&Spring記事人気No3
Python
Pythonで文字列を置換する方法!replace()の使い方と正規表現の活用
No.4
Java&Spring記事人気No4
Python
Pythonのクロージャー(Closure)とは?関数内関数とnonlocalの活用
No.5
Java&Spring記事人気No5
Python
Pythonでリストを分割する方法(スライス / split() / itertools)
No.6
Java&Spring記事人気No6
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.7
Java&Spring記事人気No7
Python
PythonのSeabornで美しいデータ可視化を実現する方法!初心者でもわかるグラフ作成入門
No.8
Java&Spring記事人気No8
PHP
PHPの認証機能を実装する方法!初心者でもわかるログイン・ログアウト処理の基本