class LabeledFeatWidget(QWidget): """Widget containing a label, a control, and a get a set button. :param parent: parent widget. :param target: driver object to connect. :param feat: Feat to connect. """ def __init__(self, parent, target, feat): super().__init__(parent) layout = QHBoxLayout(self) self._label = QLabel() self._label.setText(feat.name) self._label.setFixedWidth(120) self._label.setToolTip(_rst_to_html(feat.__doc__)) layout.addWidget(self._label) if isinstance(feat, DictFeat): self._widget = DictFeatWidget(parent, target, feat) else: self._widget = WidgetMixin.from_feat(feat) self._widget.bind_feat(feat) self._widget.lantz_target = target layout.addWidget(self._widget) self._get = QPushButton() self._get.setText('get') self._get.setEnabled(self._widget.readable) self._get.setFixedWidth(60) layout.addWidget(self._get) self._set = QPushButton() self._set.setText('set') self._set.setEnabled(self._widget.writable) self._set.setFixedWidth(60) layout.addWidget(self._set) self._get.clicked.connect(self.on_get_clicked) self._set.clicked.connect(self.on_set_clicked) self._widget._update_on_change = self._widget.writable self.widgets = (self._label, self._widget, self._get, self._set) @property def label_width(self): """Width of the label """ return self._label.width @label_width.setter def label_width(self, value): self._label.setFixedWidth(value) @property def lantz_target(self): """Driver connected to this widget. """ return self._widget._lantz_target @lantz_target.setter def lantz_target(self, driver): self._widget._lantz_target = driver @Slot() def on_get_clicked(self): self._widget.value_from_feat() @Slot() def on_set_clicked(self): font = QFont() font.setItalic(False) self._widget.setFont(font) self._widget.value_to_feat() @property def readable(self): """If the Feat associated with the widget can be read (get). """ return self._widget.readable @property def writable(self): """If the Feat associated with the widget can be written (set). """ return self._widget.writable