PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。配布ライセンスは LGPL で公開されています。最新のバージョンは Qt6 に対応した PySide6(記事執筆時点で 6.3.1)です。
文字列とチェックボックスをマトリックス状に配置したウィジェットが必要になり、出来合いの QStandardItemModel を使ってチェックボックスを QTableView のセルに表示するサンプルを作ってみました。
下記の OS 環境で動作確認をしました。
![]() |
Fedora Linux 36 | x86_64 |
python3 | 3.10.6-1.fc36.x86_64 | |
PySide6 | 6.3.1 |
qt_tableview_checkbox.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# coding: utf-8 | |
import sys | |
from PySide6.QtGui import ( | |
QStandardItem, | |
QStandardItemModel, Qt, | |
) | |
from PySide6.QtWidgets import ( | |
QApplication, | |
QMainWindow, | |
QTableView, QHeaderView, | |
) | |
class Example(QMainWindow): | |
list_label = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] | |
def __init__(self): | |
super().__init__() | |
self.init_ui() | |
self.setWindowTitle('TableView with CheckBox') | |
def init_ui(self): | |
""" | |
initialize UI | |
""" | |
tblview = QTableView() | |
tblview.horizontalHeader().setSectionResizeMode( | |
QHeaderView.ResizeToContents | |
) | |
model = QStandardItemModel() | |
model.itemChanged.connect(self.on_check_item) | |
tblview.setModel(model) | |
self.setCentralWidget(tblview) | |
for row in range(len(self.list_label)): | |
list_row = list() | |
for column in range(10): | |
item = QStandardItem() | |
if column == 0: | |
item.setText(self.list_label[row]) | |
else: | |
item.setCheckable(True) | |
item.setCheckState(Qt.CheckState.Checked) | |
item.setEditable(False) | |
list_row.append(item) | |
model.appendRow(list_row) | |
def on_check_item(self, item: QStandardItem): | |
""" | |
on_check_item | |
examine check status | |
""" | |
if item.isCheckable(): | |
row = item.row() | |
col = item.column() | |
if item.checkState() == Qt.CheckState.Checked: | |
msg = 'checked' | |
else: | |
msg = 'unchecked' | |
print('(%d, %d) -> %s' % (row, col, msg)) | |
def main(): | |
app = QApplication(sys.argv) | |
ex = Example() | |
ex.show() | |
sys.exit(app.exec()) | |
if __name__ == "__main__": | |
main() |
qt_tableview_checkbox.py の実行例
チェックを外すと下記のように出力されます。
(1, 3) -> unchecked (2, 6) -> unchecked (3, 4) -> unchecked
参考サイト
- QTableView — Qt for Python
- QStandardItemModel — Qt for Python
- QStandardItem — Qt for Python
- bitWalk's: PySide6: チェックボックス付きの QTreeView [2022-03-24]

にほんブログ村

0 件のコメント:
コメントを投稿