PyQt:QTableWidget中的Checkbox

时间:2012-09-11 09:20:12

标签: python checkbox pyqt qtablewidget

我使用以下代码在我的QTableWidget

的第9列中添加一个复选框
chkBoxItem = QtGui.QTableWidgetItem()
chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
chkBoxItem.setCheckState(QtCore.Qt.Unchecked)       
table.setItem(rowNo,9,chkBoxItem)

table是我的QtTableWidget。我需要将单击复选框的行添加到列表中..我到底如何实现这一目标?

亲切的问候,

1 个答案:

答案 0 :(得分:10)

一种方法是:

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

  2. 测试处理程序

  3. 中所点击项目的checkedState
  4. 如果选中该项,请将其row添加到列表中

  5. 示例代码:

    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_())