【Python】PythonでのGUI作成5

2025 年 6 月 9 日 by yamamotor

1.はじめに

今回は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を利用してテーブルを作成、また入力内容をテーブルに反映させました。

テーブルは利用頻度が高いため、使いこなせるようにしていきましょう。

タグ: ,

TrackBack