PyQt: QTableWidget中的复选框

7

我使用以下代码将复选框放在我的QTableWidget的第9列中:

chkBoxItem = QtGui.QTableWidgetItem()
chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
chkBoxItem.setCheckState(QtCore.Qt.Unchecked)       
table.setItem(rowNo,9,chkBoxItem)
是我的 QtTableWidget
。 我需要将单击复选框的行添加到列表中。我该如何做到这一点?此致敬礼,

你尝试过只是创建一个列表属性来存储每一行的状态吗?或者使用属性?还是你在连接chkBoxItemclicked信号到正确的方法时遇到了问题? - Pierre GM
请查看此帖子 https://stackoverflow.com/questions/39511181/python-add-checkbox-to-every-row-in-qtablewidget/67638037#67638037 - Rishabh Bhardwaj
1个回答

15

一种实现的方法是:

  1. 将表格的 itemClicked 信号连接到一个处理程序上

  2. 在处理程序中测试点击的项目的 checkedState

  3. 如果该项目已选中,则将其 row 添加到列表中

示例代码:

from PyQt4 import QtGui, QtCore

class Window(QtGui.QWidget):
    def __init__(self, rows, columns):
        QtGui.QWidget.__init__(self)
        self.table = QtGui.QTableWidget(rows, columns, self)
        for column in range(columns):
            for row in range(rows):
                item = QtGui.QTableWidgetItem('Text%d' % row)
                if row % 2:
                    item.setFlags(QtCore.Qt.ItemIsUserCheckable |
                                  QtCore.Qt.ItemIsEnabled)
                    item.setCheckState(QtCore.Qt.Unchecked)
                self.table.setItem(row, column, item)
        self.table.itemClicked.connect(self.handleItemClicked)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.table)
        self._list = []

    def handleItemClicked(self, item):
        if item.checkState() == QtCore.Qt.Checked:
            print('"%s" Checked' % item.text())
            self._list.append(item.row())
            print(self._list)
        else:
            print('"%s" Clicked' % item.text())

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window(6, 3)
    window.resize(350, 300)
    window.show()
    sys.exit(app.exec_())

如果有一个按钮说“全选”,我们该如何实现它? - Abhijit Gujar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接