QCheckBox 仅在选中两次时执行

QCheckBox only executes when checked twice

我有一个 QCheckBox (deselect_checkbox),当它被选中时,它会设置另一个 QCheckBox (first_checkbox) 和它自己为 False。但是,它每隔一段时间才有效,我不确定为什么。这是代码:

def deselect_func():
    if self.dockwidget.deselect_checkbox.isChecked():
        self.dockwidget.first_checkbox.setChecked(False)
        self.dockwidget.deselect_checkbox.setChecked(False)

self.dockwidget.deselect_checkbox.stateChanged.connect(deselect_func)

如何在每次检查 deselect_checkbox 时获取 运行 的功能?


在 Qt Designer 4.8.5 中使用 QGIS 2.16.0。

你混淆了 "check-state" 和 "checked"。

前者可以有三种状态:Unchecked、PartiallyChecked、Checked,而后者只是True/False。如果您调用 setChecked() 而不是 setCheckState(),则不会注册状态更改。因此,在下一次点击时,不会发出 stateChanged 信号(因为未检测到任何变化)。

要解决此问题,您的代码必须如下所示:

def deselect_func():
    if self.dockwidget.deselect_checkbox.isChecked():
        self.dockwidget.first_checkbox.setChecked(False)
        self.dockwidget.deselect_checkbox.setChecked(False)

self.dockwidget.deselect_checkbox.toggled.connect(deselect_func)

或者像这样:

def deselect_func():
    if self.dockwidget.deselect_checkbox.checkState() == QtCore.Qt.Checked:
        self.dockwidget.first_checkbox.setCheckState(QtCore.Qt.Unchecked)
        self.dockwidget.deselect_checkbox.setCheckState(QtCore.Qt.Unchecked)

self.dockwidget.deselect_checkbox.stateChanged.connect(deselect_func)

但请注意,这意味着 deselect_checkbox 永远不会显示为选中状态,因为它总是立即取消选中。那是你真正想要的吗?