PythonのPyQtでシンプルな電卓アプリを作る方法!初心者でもわかるGUIプログラミング入門
生徒
「Pythonで電卓アプリを作るって難しいですか?」
先生
「大丈夫です。PythonのPyQtというライブラリを使うと、簡単にGUI(グラフィカルユーザーインターフェース)で電卓を作れます。」
生徒
「GUIってなんですか?」
先生
「画面上にボタンや入力欄などを表示して、マウスやキーボードで操作できるインターフェースのことです。電卓のボタンをクリックして数字が出るのもGUIの一例です。」
生徒
「なるほど。ではPythonでどうやって作るんですか?」
先生
「順番に手を動かしながら見ていきましょう。」
1. PyQtのインストール方法
まず、PyQtを使うためにPythonにインストールする必要があります。PyQtはPythonで使えるGUIライブラリのひとつです。インストールは簡単で、コマンドプロンプトやターミナルで次のコマンドを実行します。
pip install pyqt5
これで、PyQtを使ったアプリ開発ができる環境が整いました。
2. シンプルなウィンドウを作る
PyQtでは、QWidgetやQMainWindowを使ってウィンドウを作ります。まずは基本的なウィンドウを作ってみましょう。
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. ボタンと入力欄を配置する
電卓には数字ボタンや演算ボタン、結果表示の入力欄が必要です。PyQtではQPushButtonとQLineEditを使います。
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. ボタンのクリックで計算式を表示する
ボタンを押したら数字や演算子が表示されるように、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. 計算を実行する
表示された計算式を計算して結果を表示するには、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. クリアボタンを追加する
計算式を一度消したいときは、クリアボタンを作ります。
def clear_display(): display.setText("")
button_clear = QPushButton("C")
button_clear.clicked.connect(clear_display)
window_layout.addWidget(button_clear)
このボタンを押すと、表示欄が空になります。
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. まとめに向けて使いやすくする工夫
さらに見やすくするために、ボタンのサイズやフォントを調整したり、ウィンドウサイズを固定したりすると使いやすくなります。例えば、setFixedSizeを使うとウィンドウサイズを固定できます。
window.setFixedSize(300, 400) これで電卓アプリの基本的なGUIが完成です。あとは自由に色を変えたり、ボタンのデザインを工夫したりすることで、自分だけの電卓アプリが作れます。
まとめ
ここまでで、PythonのPyQtを使ったシンプルな電卓アプリの作り方を詳しく学びました。まず、PythonにPyQt5をインストールすることで、GUIアプリ開発の環境を整えることができました。そして、QWidgetやQMainWindowを使ってウィンドウを作成し、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.connectやlambdaの使い方を覚えると、さまざまな操作をボタンに割り当てられるようになります。」
生徒
「なるほど。これなら数字を増やしたり、新しい演算を追加したりすることもできそうですね。」
先生
「その通りです。さらにUIを工夫して色やフォントを調整すれば、見やすくて操作しやすい電卓アプリになります。今回の学習で、PythonのGUIアプリ開発の基本をしっかり身につけられましたね。」