\ 迷ったらまずTechAcademyの無料カウンセリング! /
PySide超入門【第11回】表形式のデータを表示!QTableWidgetの徹底解説

「データを表形式で表示したい」
そんなときに活躍するのが QTableWidget
です。
このウィジェットを使えば、表のようなレイアウトでテキストや画像、チェックボックスなどを行や列に並べて表示することができます。
本記事では、QTableWidget
の基本から実用的なカスタマイズ方法までを徹底解説します。
目次
QTableWidgetとは?
QTableWidget
は、固定行・固定列のグリッド表を表示するウィジェットで、テーブルに直接アイテムを挿入して操作できるのが特徴です。
基本コード
from PySide6.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QVBoxLayout
import sys
app = QApplication(sys.argv)
window = QWidget()
layout = QVBoxLayout()
table = QTableWidget()
table.setRowCount(3)
table.setColumnCount(2)
table.setHorizontalHeaderLabels(["名前", "年齢"])
table.setItem(0, 0, QTableWidgetItem("田中"))
table.setItem(0, 1, QTableWidgetItem("25"))
#==============================================
# ここにコードを追加します
#==============================================
layout.addWidget(table)
window.setLayout(layout)
window.show()
app.exec()

主なプロパティとメソッド一覧(全解説)
No | メソッド / プロパティ | 説明 | 例 |
---|---|---|---|
1 | setRowCount(int) /setColumnCount(int) | 表の行数と列数を設定 | table.setRowCount(5) |
2 | setItem(row, col, item) | セルにデータ(QTableWidgetItem)を挿入 | table.setItem(0, 0, QTableWidgetItem("A")) |
3 | setHorizontalHeaderLabels(list) | 列ヘッダーのラベルを設定 | table.setHorizontalHeaderLabels(["A", "B"]) |
4 | item(row, col) | 指定セルのデータを取得 | item = table.item(0, 0).text() |
5 | insertRow(index) /removeRow(index) | 指定位置に行を挿入・削除 | table.insertRow(1) |
6 | setEditTriggers(trigger) | 編集の挙動を設定 | table.setEditTriggers(QAbstractItemView.NoEditTriggers) |
7 | setSelectionBehavior(mode) | 行単位 or セル単位の選択を指定 | SelectRows or SelectItems |
8 | clearContents() | 中身をすべてクリア | table.clearContents() |
9 | setAlternatingRowColors(bool) | 行の背景色を交互に設定 | table.setAlternatingRowColors(True) |
10 | resizeColumnsToContents() | 各列幅を内容に合わせて自動調整 | table.resizeColumnsToContents() |
各プロパティ・メソッド 詳細解説
【1】行数と列数の設定
- 概要: 表のサイズ(行数と列数)を定義します。
- メソッド:
setRowCount(int)
/setColumnCount(int)
- 使い方:
table.setRowCount(5) # 5行に設定
table.setColumnCount(6) # 6列に設定

【2】セルにアイテムを挿入
- 概要: 指定したセルに
QTableWidgetItem
を挿入してデータを表示します。 - メソッド:
setItem(row, col, item)
- 使い方:
item1 = QTableWidgetItem("佐藤")
item2 = QTableWidgetItem("28")
table.setItem(1, 0, item1) # (1, 0) のセルに「佐藤」を挿入
table.setItem(1, 1, item2) # (1, 1) のセルに「28」を挿入

【3】列ヘッダーの設定
- 概要: 各列のラベルを指定して、表の意味を分かりやすくします。
- メソッド:
setHorizontalHeaderLabels(list[str])
- 使い方:
table.setHorizontalHeaderLabels(["名前", "年齢", "住所", "職業"])

【4】セルの内容を取得
- 概要: 指定したセルの
QTableWidgetItem
を取得して、内容を読み取ります。 - メソッド:
item(row, col)
- 使い方:
value = table.item(0, 1).text() # (0, 1) のセルのテキストを取得
print(value)
# 25
【5】行の挿入・削除
- 概要: 表の途中に行を挿入したり、不要な行を削除できます。
- メソッド:
insertRow(int)
/removeRow(int)
- 使い方:
table.insertRow(1) # 2行目の前に新しい行を挿入
table.removeRow(2) # 3行目を削除

【6】編集操作の制御
- 概要: セルの編集を許可/禁止できます。初期状態では編集可能です。
- メソッド:
setEditTriggers(trigger)
- 使い方:
from PySide6.QtWidgets import QAbstractItemView
table.setEditTriggers(QAbstractItemView.NoEditTriggers) # 編集禁止
【7】選択モードの設定
- 概要: 行単位またはセル単位での選択を切り替えます。
- メソッド:
setSelectionBehavior(mode)
- 使い方:
from PySide6.QtWidgets import QAbstractItemView
table.setSelectionBehavior(QAbstractItemView.SelectRows) # 行単位で選択
# または
table.setSelectionBehavior(QAbstractItemView.SelectItems) # セル単位で選択
【8】中身だけをすべてクリア
- 概要: 表の構造(行列数)は維持したまま、内容だけを削除します。
- メソッド:
clearContents()
- 使い方:
table.clearContents()

【9】交互の背景色を設定
- 概要: 表の行の背景色を交互に設定して、視認性を高めます。
- メソッド:
setAlternatingRowColors(bool)
- 使い方:
table.setAlternatingRowColors(True) # TrueでON、FalseでOFF
デフォルトスタイルのままでもグレー/白などで交互に表示され、テーブルが見やすくなります。

【10】列幅の自動調整
- 概要: 各列の幅を自動で中身に合わせて調整します。長いテキストを含む列が見切れなくなります。
- メソッド:
resizeColumnsToContents()
- 使い方:
table.resizeColumnsToContents()
※ テーブルの内容を更新したあとに呼ぶと効果的です。

すぐに使える実用例
# 3x2の成績表のようなテーブルを作成
table.setRowCount(3)
table.setColumnCount(2)
table.setHorizontalHeaderLabels(["名前", "点数"])
students = [("山田", "85"), ("佐藤", "90"), ("鈴木", "78")]
for row, (name, score) in enumerate(students):
table.setItem(row, 0, QTableWidgetItem(name))
table.setItem(row, 1, QTableWidgetItem(score))
table.setAlternatingRowColors(True) # TrueでON、FalseでOFF

よくある質問(FAQ)
- セルに画像を表示するには?
-
QTableWidgetItem.setIcon(QIcon(...))
を使えば可能です。 - テーブルのセルにチェックボックスを付けられますか?
-
item.setCheckState(Qt.Checked)
を使います。 - 編集可能にするには?
-
デフォルトで編集可能です。無効にしている場合は
setEditTriggers
を確認してください。 - 行ヘッダーを非表示にできますか?
-
table.verticalHeader().setVisible(False)
で非表示にできます。 - 行の背景色を変えたいのですが?
-
item.setBackground(QtGui.QColor("lightblue"))
などで指定可能です。
まとめ
QTableWidget
を使えば、表形式のUIを簡単に作成することができます。
テキスト、画像、チェックボックスなど、柔軟なレイアウトが可能で、
リストビューやCSV表示、編集可能なテーブルなど多用途に応用できます。
次回は、QTabWidget
を使って複数の画面を切り替えて表示できる「タブ付きUI」をご紹介します!
使える.py


PySide超入門【第12回】タブ付きUIを簡単に実装!QTabWidgetの使い方徹底解説 | 使える.py
GUIアプリにおいて複数の画面を切り替えて表示できる「タブ付きUI」は、情報を整理して見せるうえで非常に有効です。PySideでは QTabWidget を使うことで、簡単にこのよう…
コメント