【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を利用してテーブルを作成、また入力内容をテーブルに反映させました。
テーブルは利用頻度が高いため、使いこなせるようにしていきましょう。