我对QCheckBox有问题。在
我试图将一个布尔变量连接到一个QCheckBox,这样当我更改boolean变量时,QCheckBox将自动被选中或取消选中。
下面的问题和我的问题是相反的。在
question: Python3 PyQt4 Creating a simple QCheckBox and changing a Boolean variable
我只是把这个问题的答案复制到这里。在
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class SelectionWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.ILCheck = False
ILCheckbox = QCheckBox(self)
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 = True
sys.exit(app.exec_())
在本例中,一旦将ILCheck设置为True,就会检查QCheckBox。在
任何帮助都将不胜感激!!!在
谢谢!!!!在
更新:
我在我的项目中使用MVC,上面的代码只是一个例子,说明了我需要什么。bool值ILCheck
将在其他地方使用,我不希望在我的模型中调用ILCheckBox
。在
我希望如果我修改ILCheck
的值,ILCheckBox
将正确反应。在
更新:
谢谢你的回复和帮助。你的解决方案太好了!!!我需要的方式更像是一个建模视图解决方案,这样我就可以将建模部分和gui部分分开。当我想更新一些东西时,我只需要更新建模,而不需要关注gui是什么样子的。我无法在视图类中设置此布尔属性,因此无法使用此解决方案。在
我不确定MVC是否适合PyQT。我有一个类似下面这样的解决问题的方法。在
^{pr2}$这个解决方案带来了一个问题,我无法解决。我认为只有一个观点才能树立一个典范。我不确定是否可以将模型设置为单个QCheckBox
。
. 在
只需在调用ILCheck后使用
ILCheckbox.setCheckState(Qt.Checked)
。在你不需要这里的信号,因为你可以准确地呼叫一个插槽。在
如果您想多次使用这个特性,您应该考虑编写一个setter来改变
self.ILCheck
的状态并发出一个信号。在澄清后编辑:
your_properly_named_anddefine_signal.emit()
。有关信号定义的更多信息,请参见http://www.pythoncentral.io/pysidepyqt-tutorial-creating-your-own-signals-and-slots/。在__init__()
中建立。在正如Avaris在他/她的答案中所示,模拟操作符
=
的重载是解决问题的一个好的开始。但是代码的问题仍然是 添加到SelectionWindow
类。在但是由于我们使用的是
Qt
,所以让我们实现一个定制的QObject
,它表示我们的“智能”布尔变量,当 更改其值。在现在,您的代码只需要做几处更改:
更换管路:
^{pr2}$签署人:
把信号和插槽连接起来,把这条线加到上面那条线后面的某个地方。{在类中建立连接并不重要
对于测试结果,只需添加:
在您的“main”中,您将在下次运行示例时看到选中的复选框。在
由于严格的原因,将完整的代码示例添加到末尾
^{} 是定义一个变量的方法,该变量在赋值/访问时执行额外的工作。下面是为此修改的代码。它将
ILCheck
更改为一个属性,这样它在赋值时也会更新复选框。没有对.setter
进行正确的错误检查,但很可能需要这样做。在相关问题 更多 >
编程相关推荐