Apr-07-2025, 04:09 PM
(This post was last modified: Apr-07-2025, 04:09 PM by Axel_Erfurt.)
But it can also work with a checkable QTableWidgetItem
from PyQt5.QtWidgets import (QMainWindow, QApplication, QPushButton, QTableWidget, QTableWidgetItem, QMessageBox) from PyQt5.QtCore import Qt class mainWin(QMainWindow): def __init__(self, parent=None): super(mainWin, self).__init__(parent) self.setupUI() def setupUI(self): self.setGeometry(0, 0, 800, 600) self.setContentsMargins(10, 5, 10, 5) tbar = self.addToolBar("Toolbar") btn = QPushButton("check selected", clicked=self.get_checked_items) tbar.addWidget(btn) self.lb = QTableWidget(20, 2) self.setCentralWidget(self.lb) self.make_table() def make_table(self): for row in range(self.lb.rowCount()): self.lb.setItem(row, 0, QTableWidgetItem(f"cell {row}")) checkbox_item = QTableWidgetItem() checkbox_item.setFlags(Qt.ItemIsEnabled | Qt.ItemIsUserCheckable) checkbox_item.setCheckState(Qt.Unchecked) self.lb.setItem(row, 1, checkbox_item) ### check every 3rd for testing for row in range(0, 19, 3): self.lb.item(row, 1).setCheckState(Qt.Checked) def get_checked_items(self): items = [] for row in range(self.lb.rowCount()): if self.lb.item(row, 1).checkState() == Qt.Checked: items.append(self.lb.item(row, 0).text()) message = f"checked items: {items}" print(message) msg = QMessageBox(1, "checked items", '\n'.join(items), QMessageBox.Ok) msg.exec() if __name__ == '__main__': import sys app = QApplication(sys.argv) win = mainWin() win.setWindowTitle("Example") win.show() sys.exit(app.exec_())