2016-08-01 82 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