2016-08-01 80 views
1

我有一个QCheckBox(deselect_checkbox),当它被选中时,将另一个QCheckBox(first_checkbox)和它自己设置为False。但是,它只能在其他时间运行,我不知道为什么。下面是代码:QCheckBox只执行时检查两次

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中使用QGIS 2.16.0 4.8.5。

回答

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将永远不会被显示为检查,因为它总是立即取消选中。这是你的真正意图吗?

+0

啊,非常感谢你,这很有道理!是的,这是我的意图:)。另外,我认为你的意思是“检查,部分检查和未检查”_? – Joseph