def __init__(self, dev, win): QtGui.QWidget.__init__(self) self.win = win self.dev = dev self.dev.sigObjectiveChanged.connect(self.objectiveChanged) #self.dev.sigPositionChanged.connect(self.positionChanged) self.ui = Ui_Form() self.ui.setupUi(self) self.objList = self.dev._allObjectives() self.switchN = len(self.objList) self.objWidgets = {} self.blockSpinChange = False row = 1 for i in self.objList: ## For each objective, create a set of widgets for selecting and updating. c = QtGui.QComboBox() r = QtGui.QRadioButton(i) #first = self.objList[i].keys()[0] #first = self.objList[i][first] xs = pg.SpinBox(step=1e-6, suffix='m', siPrefix=True) ys = pg.SpinBox(step=1e-6, suffix='m', siPrefix=True) zs = pg.SpinBox(step=1e-6, suffix='m', siPrefix=True) ss = pg.SpinBox(step=1e-7, bounds=(1e-10, None)) xs.index = ys.index = zs.index = ss.index = i ## used to determine which row has changed widgets = (r, c, xs, ys, zs, ss) for col, w in enumerate(widgets): self.ui.objectiveLayout.addWidget(w, row, col) self.objWidgets[i] = widgets for o in self.objList[i].values(): c.addItem(o.name(), o) o.sigTransformChanged.connect(self.updateSpins) ## objectives are accessed like: ## index = changedWidget.index ## combo = self.objWidgets[index][1] ## obj = combo.currentData() r.clicked.connect(self.objRadioClicked) c.currentIndexChanged.connect(self.objComboChanged) xs.sigValueChanged.connect(self.offsetSpinChanged) ys.sigValueChanged.connect(self.offsetSpinChanged) zs.sigValueChanged.connect(self.offsetSpinChanged) ss.sigValueChanged.connect(self.scaleSpinChanged) row += 1 self.updateSpins()