def __init__(self): QtGui.QWidget.__init__(self) self.slider = QFloatSlider(QtCore.Qt.Horizontal) self.spinbox = QtGui.QDoubleSpinBox() # Fill background to avoid to see text or widget behind self.setAutoFillBackground(True) AbstractFloatWidget.__init__(self) # To be compatible with tree or table views, slider must keep focus self.slider.setFocusPolicy(QtCore.Qt.StrongFocus) self.setMinimumHeight(22) self.spinbox.setMinimumHeight(18) self.slider.setMinimumHeight(18) self.slider.floatValueChanged.connect(self.spinbox.setValue) self.spinbox.valueChanged.connect(self.slider.setFloatValue) # self.slider.floatValueChanged.connect(self.valueChanged) self.spinbox.valueChanged.connect(self.valueChanged) layout = QtGui.QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.addWidget(self.spinbox) layout.addWidget(self.slider) self.value_changed_signal = self.valueChanged
def __set_curves(self): self.__refreshTimout.stop() crvs = self.__crvs if len(crvs) == len(self.__curveViews): #refresh the existing views for i in range(len(crvs)): pos, c = crvs[i] v = self.__curveViews[i] v.setCurve(c) v.pos = pos self.__curveLabels[i].setValue(pos) else: #recreate them del self.__curveViews[:] del self.__curveLabels[:] scrolledWidget = QtGui.QWidget(self) layout = QtGui.QBoxLayout(self.orientation) scrolledWidget.setLayout(layout) # -- used to lock the bounding cross section line edits -- minPos = min(crvs, key=lambda x: x[0])[0] maxPos = max(crvs, key=lambda x: x[0])[0] for pos, c in crvs: frame = QtGui.QFrame(scrolledWidget) frame.setFrameShape(QtGui.QFrame.Panel) frame.setFrameShadow(QtGui.QFrame.Raised) subLay = QtGui.QBoxLayout(QtGui.QBoxLayout.TopToBottom) frame.setLayout(subLay) w = CurvePanel.SimpleCurve2DView(pos, c, frame) w.clicked.connect(self.curveEditRequested) w.deleteRequested.connect(self.curveDeleteRequested) label = QtGui.QDoubleSpinBox() label.setRange(-100000., 100000.) label.setValue(pos) label.setAlignment(QtCore.Qt.AlignHCenter) sender = SenderWidget(label, float, self) if pos in [minPos, maxPos]: label.setEnabled(False) else: sender.valueChanged.connect(self.__on_label_changed) subLay.addWidget(w, QtCore.Qt.AlignHCenter) subLay.addWidget(label, QtCore.Qt.AlignHCenter) layout.addWidget(frame) self.__curveViews.append(w) self.__curveLabels.append(label) self.setWidget(scrolledWidget)
def make_widget(self, typ, value, parent): """ Take this value and type and make me a nice widget please. The widget is wrapped in a SenderWidget and can be accessed through the widget.inner attribute.""" w = None if typ == bool: w = QtGui.QCheckBox(parent) w.setCheckState( QtCore.Qt.Checked if value else QtCore.Qt.Unchecked) elif typ == tuple: w = QtGui.QLineEdit(str(value), parent) elif typ == int: w = QtGui.QSpinBox(parent) w.setRange(-10000, 10000) w.setSingleStep(1) elif typ == float: w = QtGui.QDoubleSpinBox(parent) w.setRange(-10000.0, 10000.0) w.setSingleStep(0.01) if w is not None: wrapper = SenderWidget(w, typ, self) wrapper.valueChanged.connect(self.__on_widget_changed) return wrapper