首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QCheckBox只在选中两次时执行

QCheckBox只在选中两次时执行
EN

Stack Overflow用户
提问于 2016-08-01 13:51:53
回答 1查看 347关注 0票数 1

我有一个QCheckBox (deselect_checkbox),当选中它时,它会将另一个QCheckBox (first_checkbox)设置为False。然而,它每隔一次才起作用,我不知道为什么。以下是代码:

代码语言:javascript
复制
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时,如何使函数运行?

使用QGIS2.16.0与4.8.5。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-01 18:06:27

你把“检查状态”和“检查”混为一谈。

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

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

代码语言:javascript
复制
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)

或者像这样:

代码语言:javascript
复制
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将永远不会显示为checked,因为它总是被立即取消检查。这就是你真正想要的吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38700666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档