def __init__(self): super().__init__() self._item_list = [] # The 'first item' is appended to the beginning of the list. The index returned # by the functions of the class is the index of 'self._item_list' array, that # does not include the 'first item'. self._first_item = "Select Line:" self.cb_element_list = QComboBox() self.cb_element_list.currentIndexChanged.connect( self.cb_element_list_current_index_changed) self.setMaximumWidth(300) self.pb_prev = PushButtonMinimumWidth("<") self.pb_prev.pressed.connect(self.pb_prev_pressed) self.pb_next = PushButtonMinimumWidth(">") self.pb_next.pressed.connect(self.pb_next_pressed) self.cb_element_list.addItems([self._first_item]) self.cb_element_list.setCurrentIndex(0) hbox = QHBoxLayout() hbox.setSpacing(0) hbox.setContentsMargins(0, 0, 0, 0) hbox.addWidget(self.pb_prev) hbox.addWidget(self.cb_element_list) hbox.addWidget(self.pb_next) self.setLayout(hbox) sp = QSizePolicy() sp.setControlType(QSizePolicy.PushButton) sp.setHorizontalPolicy(QSizePolicy.Maximum) self.setSizePolicy(sp)
def __init__(self): super().__init__() self._range_table = [] self._limit_table = [] self._rgb_keys = ["red", "green", "blue"] self._rgb_dict = {_: None for _ in self._rgb_keys} widget_layout = self._setup_rgb_widget() self.setLayout(widget_layout) sp = QSizePolicy() sp.setControlType(QSizePolicy.PushButton) sp.setHorizontalPolicy(QSizePolicy.Expanding) sp.setVerticalPolicy(QSizePolicy.Fixed) self.setSizePolicy(sp)
def __init__(self, *, name="", add_sliders=False, slider_steps=10000, selection_to_range_min=0.001): """ Class constructor for RangeManager Parameters ---------- add_sliders: bool True - the widget will include sliders for controlling the range, False - the widget will have no sliders without sliders slider_steps: int The number of slider steps. Determines the precision of the slider. Default value is sufficient in most cases selection_to_range_min: float Minimum ratio of the selected range and total range. Must be floating point number >=0. Used only when the value type is set to "float": `self.set_value_type("float")`. Minimum selected range is always 1 when "int" value type is set. """ super().__init__() self._name = name # Set the maximum number of steps for the sliders (resolution) self.sld_n_steps = slider_steps # Ratio of the minimum range and total range. It is used to compute # the value of 'self._range_min_diff'. The widget will prevent # range to be set to smaller value than 'self._range_min_diff'. self._selection_to_range_min = selection_to_range_min self._range_low = 0.0 self._range_high = 100.0 self._range_min_diff = (self._range_high - self._range_low) * self._selection_to_range_min self._value_per_step = (self._range_high - self._range_low) / self.sld_n_steps self._value_type = "float" # The following values are used to keep the low and high of the range. # Those values are 'accepted' values that reflect current selected range. self._value_low = self._range_low self._value_high = self._range_high max_element_width = 200 self.le_min_value = LineEditExtended() self.le_max_value = LineEditExtended() self.validator_low = DoubleValidatorRelaxed() self.validator_high = DoubleValidatorRelaxed() self.le_min_value.setMaximumWidth(max_element_width) self.le_min_value.textEdited.connect(self.le_min_value_text_edited) self.le_min_value.textChanged.connect(self.le_min_value_text_changed) self.le_min_value.editingFinished.connect( self.le_min_value_editing_finished) self.le_max_value.setMaximumWidth(max_element_width) self.le_max_value.textEdited.connect(self.le_max_value_text_edited) self.le_max_value.textChanged.connect(self.le_max_value_text_changed) self.le_max_value.editingFinished.connect( self.le_max_value_editing_finished) self.le_min_value.setAlignment(Qt.AlignRight | Qt.AlignVCenter) self.le_max_value.setAlignment(Qt.AlignRight | Qt.AlignVCenter) # The flag is set true if mouse is pressed on one of the sliders # Both sliders can not be pressed at once, so one variable is sufficient self._sld_mouse_pressed = False self.sld_min_value = QSlider(Qt.Horizontal) self.sld_min_value.valueChanged.connect( self.sld_min_value_value_changed) self.sld_min_value.sliderPressed.connect( self.sld_min_value_slider_pressed) self.sld_min_value.sliderReleased.connect( self.sld_min_value_slider_released) self.sld_max_value = QSlider(Qt.Horizontal) self.sld_max_value.valueChanged.connect( self.sld_max_value_value_changed) self.sld_max_value.sliderPressed.connect( self.sld_max_value_slider_pressed) self.sld_max_value.sliderReleased.connect( self.sld_max_value_slider_released) self.sld_min_value.setMaximumWidth(max_element_width) self.sld_max_value.setMaximumWidth(max_element_width) # The slider for controlling minimum is inverted self.sld_min_value.setInvertedAppearance(True) self.sld_min_value.setInvertedControls(True) self.sld_min_value.setMaximum(self.sld_n_steps) self.sld_max_value.setMaximum(self.sld_n_steps) self.sld_min_value.setValue(self.sld_min_value.maximum()) self.sld_max_value.setValue(self.sld_max_value.maximum()) self.set_value_type(self._value_type) # Set the validator grid = QGridLayout() grid.setHorizontalSpacing(0) grid.setVerticalSpacing(0) grid.setContentsMargins(0, 0, 0, 0) grid.addWidget(self.le_min_value, 0, 0) grid.addWidget(QLabel(".."), 0, 1) grid.addWidget(self.le_max_value, 0, 2) if add_sliders: grid.addWidget(self.sld_min_value, 1, 0) grid.addWidget(QLabel(""), 1, 1) grid.addWidget(self.sld_max_value, 1, 2) self.setLayout(grid) sp = QSizePolicy() sp.setControlType(QSizePolicy.PushButton) sp.setHorizontalPolicy(QSizePolicy.Maximum) self.setSizePolicy(sp)