def __init__(self, collect, default=None, parent=None): """Create a new dialog for subset faceting :param collect: The :class:`~glue.core.data_collection.DataCollection` to use :param default: The default dataset in the collection (optional) """ super(SubsetFacet, self).__init__(parent=parent) self.ui = load_ui('subset_facet.ui', self, directory=os.path.dirname(__file__)) self.ui.setWindowTitle("Subset Facet") self._collect = collect self.ui.component_selector.setup(self._collect) if default is not None: self.ui.component_selector.data = default val = QtGui.QDoubleValidator(-1e100, 1e100, 4, None) self.ui.component_selector.component_changed.connect(self._set_limits) combo = self.ui.color_scale for cmap in [cm.cool, cm.RdYlBu, cm.RdYlGn, cm.RdBu, cm.Purples]: combo.addItem(QtGui.QIcon(cmap2pixmap(cmap)), cmap.name, cmap)
def choose_vmin_vmax(self): dialog = load_ui('contrastlimits.ui', None, directory=os.path.dirname(__file__)) v = QtGui.QDoubleValidator() dialog.vmin.setValidator(v) dialog.vmax.setValidator(v) vmin, vmax = self.get_vmin_vmax() if vmin is not None: dialog.vmin.setText(str(vmin)) if vmax is not None: dialog.vmax.setText(str(vmax)) def _apply(): try: vmin = float(dialog.vmin.text()) vmax = float(dialog.vmax.text()) self.set_vmin_vmax(vmin, vmax) if self._move_callback is not None: self._move_callback(self) except ValueError: pass bb = dialog.buttonBox bb.button(bb.Apply).clicked.connect(_apply) dialog.accepted.connect(_apply) dialog.show() dialog.raise_() dialog.exec_()
def connect_float_edit(client, prop, widget): """ Connect widget.setText and client.prop Also pretty-print the number client.prop should be a callback property """ v = QtGui.QDoubleValidator(None) v.setDecimals(4) widget.setValidator(v) def update_prop(): val = widget.text() try: setattr(client, prop, float(val)) except ValueError: setattr(client, prop, 0) def update_widget(val): if val is None: val = 0. widget.setText(pretty_number(val)) add_callback(client, prop, update_widget) widget.editingFinished.connect(update_prop) update_widget(getattr(client, prop))
def _init_limits(self): validator = QtGui.QDoubleValidator(None) validator.setDecimals(7) self.ui.xmin.setValidator(validator) self.ui.xmax.setValidator(validator) lo, hi = self.client.xlimits self.ui.xmin.setText(str(lo)) self.ui.xmax.setText(str(hi))
def __init__(self, constraints, parent=None): """ Parameters ---------- constraints : dict The `contstraints` property of a :class:`~glue.core.fitters.BaseFitter1D` object parent : QtGui.QWidget (optional) The parent of this widget """ super(ConstraintsWidget, self).__init__(parent) self.constraints = constraints self.layout = QtGui.QGridLayout() self.layout.setContentsMargins(2, 2, 2, 2) self.layout.setSpacing(4) self.setLayout(self.layout) self.layout.addWidget(QtGui.QLabel("Estimate"), 0, 1) self.layout.addWidget(QtGui.QLabel("Fixed"), 0, 2) self.layout.addWidget(QtGui.QLabel("Bounded"), 0, 3) self.layout.addWidget(QtGui.QLabel("Lower Bound"), 0, 4) self.layout.addWidget(QtGui.QLabel("Upper Bound"), 0, 5) self._widgets = {} names = sorted(list(self.constraints.keys())) for k in names: row = [] w = QtGui.QLabel(k) row.append(w) v = QtGui.QDoubleValidator() e = QtGui.QLineEdit() e.setValidator(v) e.setText(str(constraints[k]['value'] or '')) row.append(e) w = QtGui.QCheckBox() w.setChecked(constraints[k]['fixed']) fix = w row.append(w) w = QtGui.QCheckBox() limits = constraints[k]['limits'] w.setChecked(limits is not None) bound = w row.append(w) e = QtGui.QLineEdit() e.setValidator(v) if limits is not None: e.setText(str(limits[0])) row.append(e) e = QtGui.QLineEdit() e.setValidator(v) if limits is not None: e.setText(str(limits[1])) row.append(e) def unset(w): def result(active): if active: w.setChecked(False) return result fix.toggled.connect(unset(bound)) bound.toggled.connect(unset(fix)) self._widgets[k] = row for i, row in enumerate(names, 1): for j, widget in enumerate(self._widgets[row]): self.layout.addWidget(widget, i, j)