我有一个QCheckBox(deselect_checkbox
),当选中时,它会将另一个QCCheckBox(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。
您混淆了"check state"one_answers"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
永远不会显示为已选中,因为它总是立即取消选中。这是你真正的意图吗?