from PyQt4 import QtGui class win(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.lay = QtGui.QVBoxLayout() self.setLayout(self.lay) self.mass = [{"obj":None, "name":"one", "text":"Первая кнопка", "val":1}, {"obj":None, "name":"two", "text":"Вторая кнопка", "val":2}] for i in self.mass: i["obj"] = QtGui.QPushButton(i["text"]) i["obj"].setObjectName(i["name"]) self.lay.addWidget(i["obj"]) i["obj"].clicked.connect(lambda: self.myfunc(i["val"])) # как тут сделать-то? def myfunc(self, val): print (str(val)) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv) window = win() window.show() sys.exit(app.exec_())
Кнопки прекрасно создаются, каждая как отдельный объект. А вот связать каждую кнопку с методом не выходит. Лямбда-блямбда, в итоге, для всех кнопок передаёт последнее значение из списка. Т.е. при нажатии на первую кнопку на экране должна бы появляться единичка, но вторую - двойка; а выходит так, что куда не тычь - получишь двойку.
Как победить?