1

我有一个 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 一起使用。

4

1 回答 1

1

您正在混淆“检查状态”和“已检查”。

前者可以有三种状态: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永远不会显示为选中,因为它总是立即取消选中。那是你真正的意图吗?

于 2016-08-01T18:06:27.563 回答