QCheckBox仅在选中twi时执行

2024-04-24 22:28:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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。你知道吗


Tags: 代码selffalseifdefconnectfirstfunc
1条回答
网友
1楼 · 发布于 2024-04-24 22:28:23

你把“检查状态”和“检查”混在一起了。你知道吗

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

相关问题 更多 >