It is not necessary to use lambda functions to send additional information if QComboBox
is used, QComboBox
can store information for each index, addItem()
has an additional parameter where information can be saved and we can access it through the itemData()
method, we can add another information with the setItemData()
method.
To know that QComboBox emitted the signal we can use sender()
, this method returns the object that emits the signal.
All of the above is implemented in the following example:
from PyQt4 import QtCore, QtGui
import sys
class myWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(myWindow, self).__init__(parent)
lay = QtGui.QHBoxLayout(self)
test = [['first', 1], ['second', 2]]
for j in range(5):
comboBox = QtGui.QComboBox(self)
lay.addWidget(comboBox)
for i, values in enumerate(test):
text, data = values
comboBox.addItem(text, (j, data))
comboBox.currentIndexChanged.connect(self.onCurrentIndexChanged)
@QtCore.pyqtSlot(int)
def onCurrentIndexChanged(self, ix):
combo = self.sender()
row, column = combo.itemData(ix)
print(row, column)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
app.setApplicationName('myApp')
dialog = myWindow()
dialog.show()
sys.exit(app.exec_())
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…