PyQt和Python中的复选框问题

时间:2015-05-09 17:27:08

标签: python checkbox pyqt4

我有一个名为“selectAllCheckBox”的复选框。当处于选中状态时,列表视图中的所有复选框(动态创建)应更改为选中状态,当“selectAllCheckBox”复选框处于未选中状态时,所有动态创建的复选框都应更改为未选中状态。

self.dlg.selectAllCheckBox.stateChanged.connect(self.selectAll)
def selectAll(self):
    """Select All layers loaded inside the listView"""

    model = self.dlg.DatacheckerListView1.model()
    for index in range(model.rowCount()):
        item = model.item(index)
        if item.isCheckable() and item.checkState() == QtCore.Qt.Unchecked:
            item.setCheckState(QtCore.Qt.Checked)

上面的代码使得即使“SelectAllCheckBox”处于未选中状态,列表视图中的动态复选框也会处于Checked状态。请帮我用python解决这个问题。有没有什么可以在信号中完成,例如当“选中”或“未选中”复选框连接到插槽而不是stateChanged?

1 个答案:

答案 0 :(得分:2)

stateChanged信号发送checked state,因此可以将插槽重写为:

def selectAll(self, state=QtCore.Qt.Checked):
    """Select All layers loaded inside the listView"""

    model = self.dlg.selectAllCheckBox.model()
    for index in range(model.rowCount()):
        item = model.item(index)
        if item.isCheckable():
            item.setCheckState(state)

(注意:如果列表视图中的所有行都有复选框,则可以省略isCheckable行)