QCheckBox仅在选中两次

时间:2016-08-01 13:51:54

标签: python qt-designer qcheckbox

我有一个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时,如何让函数运行?

将QGIS 2.16.0与Qt Designer 4.8.5一起使用。

1 个答案:

答案 0 :(得分:1)

你正在混淆“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永远不会显示为已选中,因为它始终会立即取消选中。这是你真正想要的吗?