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
永远不会显示为选中状态,因为它总是立即取消选中。那是你真正想要的吗?
我有一个 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
永远不会显示为选中状态,因为它总是立即取消选中。那是你真正想要的吗?