我对 QCheckBox 有疑问。
我正在尝试将布尔变量连接到 QCheckBox 以便当我更改布尔变量时,QCheckBox 将被自动选中或取消选中。
我的问题类似于下面的问题,但方式相反。
问题:Python3 PyQt4 创建一个简单的 QCheckBox 并更改一个布尔变量
我只是将那个问题的一个解决方案复制到这里。
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,上面的代码只是一个示例,显示了我需要什么。布尔值ILCheck
将在其他地方使用,我不想ILCheckBox
在我的模型中调用。
我希望如果我修改 , 的值ILCheck
,ILCheckBox
会做出正确的反应。
更新:
感谢您的所有回复和帮助。你所有的解决方案都很棒!!!我需要的方式更像是一个建模视图解决方案,以便我可以将建模部分与 gui 部分分开。当我想更新一些东西时,我只需要更新建模,而不需要关注 gui 的样子。我无法在 View Class 中设置此 Bool 属性,因此无法使用此解决方案。
我不确定 MVC 是否适合 PyQT。我有一个像下面这样有问题的解决方案。
from PyQt4 import QtGui, QtCore, uic
import sys
class CellList(QtGui.QStandardItemModel):
def __init__(self, cells = [], parent = None):
QtGui.QStandardItemModel.__init__(self, parent)
self.__cells = cells
self.add(cells)
def headerData(self, section, orientation, role):
if role == QtCore.Qt.DisplayRole:
return QtCore.QString("Cell id List")
def flags(self, index):
return QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
def add(self, cells):
for i in xrange(0, len(cells)):
item = QtGui.QStandardItem('Cell %s' % cells[i][0])
if (cells[i][1]):
item.setCheckState(QtCore.Qt.Checked)
else:
item.setCheckState(QtCore.Qt.Unchecked)
item.setCheckable(True)
self.appendRow(item)
def update(self, cells = None):
# TODO: Making this working with out clean all old Cell
self.clear()
if cells is None:
cells = self.__cells
else:
print "hi"
self.__cells = cells
print cells
self.add(cells)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
listView = QtGui.QListView()
listView.show()
data = [[85, True], (105, True), (123, False)]
model = CellList(data)
listView.setModel(model)
data[0][1] = False
model.update(data)
sys.exit(app.exec_())
这个解决方案有一个问题,我无法解决。我认为只有视图才能设置模型。我不确定是否可以将模型设置为单个QCheckBox
. .