<p>正如Avaris在他/她的答案中所示,模拟操作符<code>=</code>的重载是解决问题的一个好的开始。但是代码的问题仍然是
添加到<code>SelectionWindow</code>类。在</p>
<p>但是由于我们使用的是<code>Qt</code>,所以让我们实现一个定制的<code>QObject</code>,它表示我们的“智能”布尔变量,当
更改其值。在</p>
<pre><code>class SmartBool(QObject):
valueChanged = pyqtSignal(bool) # Signal to be emitted when value changes.
def __init__(self):
super(SmartBool, self).__init__() # Call QObject contructor.
self.__value = False # False initialized by default.
@property
def value(self):
return self.__value
@value.setter
def value(self, value):
if self.__value != value:
self.valueChanged.emit(value) # If value change emit signal.
self.__value = value
</code></pre>
<p>现在,您的代码只需要做几处更改:</p>
<p>更换管路:</p>
^{pr2}$
<p>签署人:</p>
<pre><code>self.ILCheck = SmartBool()
</code></pre>
<p>把信号和插槽连接起来,把这条线加到上面那条线后面的某个地方。{<strong>在类中建立连接并不重要</p>
<pre><code>self.connect(self.ILCheck, SIGNAL("valueChanged(bool)"), ILCheckbox, SLOT("setChecked(bool)"))
</code></pre>
<p>对于测试结果,只需添加:</p>
<pre><code> window.ILCheck.value = True
</code></pre>
<p>在您的“main”中,您将在下次运行示例时看到选中的复选框。在</p>
<p><strong>由于严格的原因,将完整的代码示例添加到末尾</strong></p>
<pre><code>import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class SmartBool(QObject):
valueChanged = pyqtSignal(bool) # Signal to be emitted when value changes.
def __init__(self, value=False):
super(SmartBool, self).__init__() # Call QObject contructor.
self.__value = value # False initialized by default.
@property
def value(self):
return self.__value
@value.setter
def value(self, value):
if self.__value != value:
self.valueChanged.emit(value) # If value change emit signal.
self.__value = value
class SelectionWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.ILCheck = SmartBool() # Your steroides bool variable.
ILCheckbox = QCheckBox(self)
self.connect(self.ILCheck, SIGNAL("valueChanged(bool)"), ILCheckbox, SLOT("setChecked(bool)"))
ILCheckbox.setCheckState(Qt.Unchecked)
ILCheckbox.stateChanged.connect(self.ILCheckbox_changed)
MainLayout = QGridLayout()
MainLayout.addWidget(ILCheckbox, 0, 0, 1, 1)
self.setLayout(MainLayout)
def ILCheckbox_changed(self, state):
self.ILCheck = (state == Qt.Checked)
print(self.ILCheck)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = SelectionWindow()
window.show()
window.ILCheck.value = True
sys.exit(app.exec_())
</code></pre>