루프가 있습니다. QCheckBox
을 작성하여 QTableWidget
셀에 넣으면 모든 것이 OK입니다. 루프의 각 단계에서 나는 connect
함수를 호출했는데, 마지막으로 QCheckBox
인스턴스 만 적용됩니다. 나는 많은 것을 봤고 많은 사람들이 내 문제를 안고 있음을 알았다. 나는 그들의 해결책을 적용했지만 내 문제가 남아있다.루프의 QtCore.QObject.connect는 마지막 인스턴스에만 영향을줍니다.
for row in xrange(len(uniqueFields)):
instance = QtGui.QCheckBox(uniqueFields[row], findInstance.tableWidget)
print QtCore.QObject.connect(instance,
QtCore.SIGNAL(_fromUtf8("stateChanged (int)")),
lambda: findInstance.projectsInstance.myslot(
"TWCH", findInstance, instance.text(),
instance.checkState(), instance))
findInstance.tableWidget.setRowCount(findInstance.tableWidget.rowCount() + 1)
findInstance.tableWidget.setCellWidget(row, 0, instance)
참고 : 내 connect
함수 반환 True
.
instances
을 모두 열거하는 루프에서 connect
함수를 만드는 방법은 무엇입니까?
신호가 방출 될 때 아무런 인수도 슬롯에 전달되지 않으므로 작동하지 않습니다. 인수없이 람다를 생성해야하지만 여전히 인스턴스의 자체 복사본이 있습니다. 따라서 람다를 만드는 함수를 사용하는 나의 대답 –
@ three_pineapples. 그것은 완벽하게 잘 작동합니다 : 작동 예제에 대한 나의 업데이트 된 답변을 참조하십시오. 원래의 대답에서 설명했듯이, 기본 변수는 루프 변수를 캐시하는 데 사용되므로 클로저를 사용할 필요가 없습니다 (작동 할 수도 있음). – ekhumoro
아, 죄송합니다, 나는 그것의'instance = instance' 부분을 건너 뛰었습니다 (단지'instance'를 읽었습니다). 귀하의 방법은 내 제안보다 훨씬 깨끗하고 내 코드에서 사용하기 시작할 것입니다. –