QCheckBox에 문제가 있습니다.Python2 PyQt4 bool 변수를 QCheckBox 항목에 연결하십시오.
boolean 변수를 변경하면 부울 변수를 변경할 때 부울 변수를 QCheckBox에 연결하려고하면 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
이 correctlly 반응 할 것으로 기대합니다.
업데이트 : 모든 응답과 도움을
감사합니다. 모든 솔루션은 훌륭합니다! 필요한 방식은 Modeling-View 솔루션과 유사하여 모델링 파트를 gui 파트와 분리 할 수 있습니다. 업데이트 할 때 업데이트 모델링이 필요하고 GUI가 어떻게 보이는지주의를 기울일 필요가 없습니다. 이 솔루션을 사용할 수 없도록 뷰 클래스에서이 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
으로 설정할 수 있는지 확실하지 않습니다. .
당신이 할 수의 끝에 추가 된 @의 property'하지만 당신이 필요 왜 내가 볼 수없는'와. 체크 박스를 드러내고 변수에 할당하는 대신'setChecked'를 사용하십시오. – Avaris
@Avaris 귀하의 도움에 감사드립니다. MVC를 사용하고 있으므로 ModelBox에'checkBox'를 노출하고 싶지는 않습니다. – NewPlayerX
답변을 작성 하겠지만 여전히 올바른 방법이라고 생각하지 않습니다. 그러나 유스 케이스를 이해하지 않고는 (QDataWidgetMapper) 다른 것을 제안 할 수는 없습니다. – Avaris