【Python】PythonでのGUI作成5
2025 年 6 月 9 日 by yamamotor1.はじめに
今回はPyQtを利用してPythonでテーブル形式の画面を作成します。
2.テーブル、入力フォーマット、登録ボタンを作成する
まずはテーブルの枠と、テーブルに項目を追加するための入力部分を作成します。
Excelで作成したイメージを下記に添付します。

下部の入力部分に入力を行い、登録ボタンを押下することで入力内容がテーブルに表示されるように作成します。
上記を実装したソースを以下に記載します。
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QTableWidget, QTableWidgetItem, QLineEdit, QPushButton
class TableApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.layout = QVBoxLayout()
# テーブルの作成
# 0行,3列のテーブル
self.table = QTableWidget(0, 3)
self.table.setHorizontalHeaderLabels(['氏名', '年齢', 'メールアドレス'])
self.layout.addWidget(self.table)
# 入力項目の作成
self.input_layout = QHBoxLayout()
self.name = QLineEdit(self)
self.old = QLineEdit(self)
self.mail = QLineEdit(self)
self.input_layout.addWidget(self.name)
self.input_layout.addWidget(self.old)
self.input_layout.addWidget(self.mail)
# 登録ボタンの作成
self.add_button = QPushButton('登録', self)
self.add_button.clicked.connect(self.add_to_table)
self.input_layout.addWidget(self.add_button)
self.layout.addLayout(self.input_layout)
self.setLayout(self.layout)
def add_to_table(self):
row_position = self.table.rowCount()
self.table.insertRow(row_position)
self.table.setItem(row_position, 0, QTableWidgetItem(self.name.text()))
self.table.setItem(row_position, 1, QTableWidgetItem(self.old.text()))
self.table.setItem(row_position, 2 ,QTableWidgetItem(self.mail.text()))
self.name.clear()
self.old.clear()
self.mail.clear()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = TableApp()
ex.show()
sys.exit(app.exec())
上記を実行すると以下のようなウィンドウが表示されます。

氏名、年齢、メールアドレスを入力し、登録ボタンを押下します。

入力した内容がテーブル内に表示されます。
次にコードについて解説します。
基本的な部分はTkinterとほぼ同様なので、テーブルの部分に限定して記載します。
def initUI(self):
self.layout = QVBoxLayout()
# テーブルの作成
# 0行,3列のテーブル
self.table = QTableWidget(0, 3)
self.table.setHorizontalHeaderLabels(['氏名', '年齢', 'メールアドレス'])
self.layout.addWidget(self.table)
まずはQVBoxLayoutで垂直方向にウィジェットを配置するレイアウトを作成します。
次に、テーブルを作成します。
今回は初期行数を0、列数を3で作成しました。
次に、setHorizontalHeaderLabelsメソッドで、列のヘッダーラベルを設定しています。
最後にaddWidgetメソッドでテーブルを作成したレイアウトに追加しています。
# 入力項目の作成
self.input_layout = QHBoxLayout()
self.name = QLineEdit(self)
self.old = QLineEdit(self)
self.mail = QLineEdit(self)
self.input_layout.addWidget(self.name)
self.input_layout.addWidget(self.old)
self.input_layout.addWidget(self.mail)
# 登録ボタンの作成
self.add_button = QPushButton('登録', self)
self.add_button.clicked.connect(self.add_to_table)
self.input_layout.addWidget(self.add_button)
self.layout.addLayout(self.input_layout)
self.setLayout(self.layout)
次に入力項目、登録ボタンを作成します。
まずはQHBoxLayoutで水平方向にウィジェットを配置するレイアウトを作成します。
次にQLineEditで各入力項目を作成し、作成したレイアウトに配置しています。
次にQPushButtonで登録ボタンを作成します。
ボタンにはclicked.connectメソッドで、クリック時にadd_to_table関数を呼び出すように設定します。
最後に登録ボタンを同様のレイアウトに追加しています。
def add_to_table(self):
row_position = self.table.rowCount()
self.table.insertRow(row_position)
self.table.setItem(row_position, 0, QTableWidgetItem(self.name.text()))
self.table.setItem(row_position, 1, QTableWidgetItem(self.old.text()))
self.table.setItem(row_position, 2 ,QTableWidgetItem(self.mail.text()))
self.name.clear()
self.old.clear()
self.mail.clear()
まず、rowCountメソッドで現在の行数を取得し、insertRowメソッドで新しい行を追加します。
次にsetItemメソッドで、入力項目を各項目にセットしていきます。
最後に入力内容をクリアしてメソッド終了です。
3.終わりに
今回はPyQtを利用してテーブルを作成、また入力内容をテーブルに反映させました。
テーブルは利用頻度が高いため、使いこなせるようにしていきましょう。

