2016-08-01 18 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?


Использование QGIS 2.16.0 с Qt Designer 4.8.5.

ответ

1

Вы смешиваете «контрольное состояние» и «проверяете».

Первый может иметь три состояния: непроверенный, частично проверенный и проверенный, тогда как последний имеет значение 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