我有一個循環。我創建了一個QCheckBox
並將它放在一個QTableWidget
單元格中,並且一切正常。在循環的每一步中,我都稱myslot SLOT爲connect
函數,但只應用最後一個QCheckBox
實例。我GOOGLE了很多,發現很多人都有我的問題。我已經應用了他們的解決方案,但我的問題依然存在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
。
如何在循環中創建connect
函數,該函數枚舉所有instances
?
這是行不通的,因爲信號發射時沒有參數傳遞給插槽。你需要創建一個沒有參數的lambda,但是它仍然有它自己的實例副本。因此,我的答案是你使用一個函數來製作@three_pineapples的lambda –
。它工作得很好:看到我的更新答案爲一個工作示例。正如我在我的原始答案中解釋的那樣,默認參數用於緩存循環變量,因此不需要使用閉包(儘管這也可以)。 – ekhumoro
啊,道歉,我跳過了它的'instance = instance'部分(我剛剛讀了'instance')。你的方法比我的建議更清潔,我將開始在我自己的代碼中使用它 –